home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1994-09-12 | 173.6 KB | 4,588 lines | [ TEXT/CCL2]
(in-package :TRAPS) ; *********************************************************** ; ; Created: Monday, November 8, 1993 11:46 AM ; OCEAuthDir.p ; Pascal Interface to the Macintosh Libraries ; ; Copyright Apple Computer, Inc. 1990-1993 ; All rights reserved ; ; *********************************************************** ; $IFC UNDEFINED UsingIncludes ; $SETC UsingIncludes:= 0 ; $ENDC ; $IFC NOT UsingIncludes ; $ENDC ; $IFC UNDEFINED UsingOCEAuthDir ; $SETC UsingOCEAuthDir:= 1 ; $I+ ; $SETC OCEAuthDirIncludes:= UsingIncludes ; $SETC UsingIncludes:= 1 ; $IFC UNDEFINED UsingAppleTalk (require-interface 'APPLETALK) ; $I $$Shell(PInterfaces)AppleTalk.p ; $ENDC ; $IFC UNDEFINED UsingFiles (require-interface 'FILES) ; $I $$Shell(PInterfaces)Files.p ; $ENDC ; $IFC UNDEFINED UsingOCE ; $I OCE.p ; $ENDC ; $IFC UNDEFINED UsingOSUtils (require-interface 'OSUTILS) ; $I $$Shell(PInterfaces)OSUtils.p ; $ENDC ; $IFC UNDEFINED UsingTypes (require-interface 'TYPES) ; $I $$Shell(PInterfaces)Types.p ; $ENDC ; $SETC UsingIncludes:= OCEAuthDirIncludes ; *************************************************************************** (defconstant $kRC4KeySizeInBytes 8); size of an RC4 key (defconstant $kRefNumUnknown 0) (defconstant $kEnumDistinguishedNameBit 0) (defconstant $kEnumAliasBit 1) (defconstant $kEnumPseudonymBit 2) (defconstant $kEnumDNodeBit 3) (defconstant $kEnumInvisibleBit 4) ; Values of DirEnumChoices (defconstant $kEnumDistinguishedNameMask #X1); 1<<kEnumDistinguishedNameBit (defconstant $kEnumAliasMask #X2); 1<<kEnumAliasBit (defconstant $kEnumPseudonymMask #X4); 1<<kEnumPseudonymBit (defconstant $kEnumDNodeMask #X8); 1<<kEnumDNodeBit (defconstant $kEnumInvisibleMask #X10); 1<<kEnumInvisibleBit (defconstant $kEnumAllMask (+ #$KENUMDISTINGUISHEDNAMEMASK (+ #$KENUMALIASMASK (+ #$KENUMPSEUDONYMMASK (+ #$KENUMDNODEMASK #$KENUMINVISIBLEMASK))))) (def-mactype :DIRENUMCHOICES (find-mactype :SIGNED-LONG)) ; Values of DirSortOption (defconstant $kSortByName 0) (defconstant $kSortByType 1) ; Values of DirSortDirection (defconstant $kSortForwards 0) (defconstant $kSortBackwards 1) ; Values of DirMatchWith (defconstant $kMatchAll 0) (defconstant $kExactMatch 1) (defconstant $kBeginsWith 2) (defconstant $kEndingWith 3) (defconstant $kContaining 4) (def-mactype :DIRMATCHWITH (find-mactype :UNSIGNED-BYTE)) (defconstant $kCurrentOCESortVersion 1) ; Access controls are implemented on three levels: ; DNode, Record, and Attribute Type levels ; Some access control bits apply to the container itself, and some apply to its contents. ; ; The Directory Toolbox supports six functions. These calls are: ; DSSetDNodeAccessControl : to set Access Controls at the DNode level ; DSGetDNodeAccessControl : to get Access Controls at the DNode level ; DSSetRecordAccessControl : to set Access Controls at the record level ; DSGetRecordAccessControl : to get Access Controls at the record level ; DSSetAttributeAccessControl : to set Access Privileges at the attribute type level ; DSGetAttributeAccessControl : to get Access Privileges at the attribute type level ; ; The GetXXXAccessControl calls will return access control masks for various categories ; of users. Please refer to the access control document for a description of the ; categories of users. In general these are: ; ThisRecordOwner - means the identity of the record itself ; Friends - means any one of the assigned friends for the record ; AuthenticatedInDNode - means any valid user that is an authenticated entity ; in the DNode in which this record is located ; AuthenticatedInDirectory - means any valid authenticated directory user ; Guest - means an unauthenticated user. ; Depending on the access control for the user (identity of the user), ; a SetXXXAccessControl operation can be performed to set controls for various ; categories of users described above. Bit masks for various permitted access ; controls are defined below. ; ; GetXXXAccessControl calls will return access control masks for various categories of ; users for this record. In addition they also return the level of access controls ; that the user (who is making the GetXXXAccessControl call) has for the DNode, ; record, or attribute type. ; ; For records, the access control granted will be minimum of the DNode access ; control and record access control masks. For example, to add an attribute type to a ; record, a user must have access control kCreateAttributeTypes at the record and ; DNode levels. Similarly, at the attribute type level, access controls will be the ; minimum of the DNode, record, and attribute type access controls. ; ; access categories bit numbers (defconstant $kThisRecordOwnerBit 0) (defconstant $kFriendsBit 1) (defconstant $kAuthenticatedInDNodeBit 2) (defconstant $kAuthenticatedInDirectoryBit 3) (defconstant $kGuestBit 4) (defconstant $kMeBit 5) ; Values of CategoryMask (defconstant $kThisRecordOwnerMask #X1); 1<<kThisRecordOwnerBit (defconstant $kFriendsMask #X2) ; 1<<kFriendsBit (defconstant $kAuthenticatedInDNodeMask #X4); 1<<kAuthenticatedInDNodeBit (defconstant $kAuthenticatedInDirectoryMask #X8); 1<<kAuthenticatedInDirectoryBit (defconstant $kGuestMask #X10) ; 1<<kGuestBit (defconstant $kMeMask #X20) ; 1<<kMeBit ; access privileges bit numbers (defconstant $kSeeBit 0) (defconstant $kAddBit 1) (defconstant $kDeleteBit 2) (defconstant $kChangeBit 3) (defconstant $kRenameBit 4) (defconstant $kChangePrivsBit 5) (defconstant $kSeeFoldersBit 6) ; Values of AccessMask (defconstant $kSeeMask #X1) ; 1<<kSeeBit (defconstant $kAddMask #X2) ; 1<<kAddBit (defconstant $kDeleteMask #X4) ; 1<<kDeleteBit (defconstant $kChangeMask #X8) ; 1<<kChangeBit (defconstant $kRenameMask #X10) ; 1<<kRenameBit (defconstant $kChangePrivsMask #X20); 1<<kChangePrivsBit (defconstant $kSeeFoldersMask #X40); 1<<kSeeFoldersBit (defconstant $kAllPrivs (+ #$KSEEMASK (+ #$KADDMASK (+ #$KDELETEMASK (+ #$KCHANGEMASK (+ #$KRENAMEMASK (+ #$KCHANGEPRIVSMASK #$KSEEFOLDERSMASK))))))) (defconstant $kNoPrivs 0) ; ; ; kSupportsDNodeNumberBit: ; If this bit is set, a DNode can be referenced using DNodeNumbers. ; RecordLocationInfo can be specified using DNodeNumber and PathName component can be nil. ; If this bit is not set, a DNode can be referenced only by PathName to the DNode. In the ; later case DNodeNumber component inside record location info must be set to zero. ; ; kSupportsRecordCreationIDBit: ; If this bit is set, a record can be referenced by specifying CreationID ; in most directory manager calls. If this bit is not set recordName and recordType are ; required in the recordID specification for all directory manager calls. ; ; kSupportsAttributeCreationIDBit: ; If this bit is set, an attribute value can be obtained by specifying it's ; CreationID in Lookup call staring point and also can be used in operations ; like DeleteAttributeValue and ChangeAttributeValue an Attribute can be ; specified by AttributeType and CreationID. ; ; ; Following three bits are for determining the sort order in enumeration. ; kSupportsWildCardOnlyinEnumerationBit: ; If this bit is set, directory supports only wild card ; (i.e. recordName as "="). ; ; kSupportsTrailingWildCardOnlyinEnumerationBit: ; This option is similar to "WildCardOnly",(i.e. recordName as "a="). ; If this is set, directory supports find capability (e.g. starts with option) ; ; kSupportsExactMatchBit: ; If this bit is set, existence of a record matching exact recordName and recordType ; specification can be found. ; ; The above three bits can be interpreted as: ; WildCardOnlyinEnumerationBit TrailingWildCardinEnumeration ExactMatch Result ; 1 0 0 Browse Only ; 0 1 0 Find Only ; 0 0 1 Exact Match Only ; 1 1 0 Browse/Find ; 0 1 1 Find/ExcatMatch ; 1 1 1 Browse/Find/ExactMatch ; ; Implicit assumption in all these is, record type can be specified either as wild card or ; a type list. ; ; The Following four bits will indicate sort ordering in enumeration. ; kSupportsOrderedEnumerationBit: ; If this bit is set, Enumerated records or in some order possibly in name order. ; kCanSupportNameOrderBit: ; If this is set, directory will support sortbyName option in Enumerate. ; kCanSupportTypeOrderBit: ; If this bit is set, directory will support sortbyType option in enumearte. ; kSupportSortBackwardsBit: ; If this bit is set, directory supports backward sorting. ; ; kSupportsEnumerationContinueBit: ; If this bit is set, directory supports enumeration continue. ; ; kSupportsLookupContinueBit: ; If this bit is set, directory supports lookup continue. ; ; kSupportsEnumerateAttributeTypeContinueBit: ; If this bit is set, directory supports EnumerateAttributeType continue. ; ; kSupportsEnumeratePseudonymContinueBit: ; If this bit is set, directory supports EnumeratePseudonym continue. ; ; kSupportsAliasesBit: ; If this bit is set, directory supports create/delte/enumerate ; of Alias Records. ; ; kSupportPseudonymBit: ; If this bit is set, directory supports create/delte/enumerate of ; pseudonyms for a record. ; ; kSupportsPartialPathNameBit: ; If this bit is set, directory nodes can be specified using DNodeNumber of a ; intermediate DNode and a partial name starting from that DNode to the intended ; DNode. ; ; kSupportsAuthenticationBit: ; If this bit is set, directory supports authentication manager calls. ; ; kSupportsProxiesBit: ; If this bit is set, directory supports proxy related calls in authentication manager. ; ; kSupportsFindRecordBit: ; If this bit is set, catalog supports find record call. ; ; Bits and corresponding masks are as defined below. ; (defconstant $kSupportsDNodeNumberBit 0) (defconstant $kSupportsRecordCreationIDBit 1) (defconstant $kSupportsAttributeCreationIDBit 2) (defconstant $kSupportsMatchAllBit 3) (defconstant $kSupportsBeginsWithBit 4) (defconstant $kSupportsExactMatchBit 5) (defconstant $kSupportsEndsWithBit 6) (defconstant $kSupportsContainsBit 7) (defconstant $kSupportsOrderedEnumerationBit 8) (defconstant $kCanSupportNameOrderBit 9) (defconstant $kCanSupportTypeOrderBit 10) (defconstant $kSupportSortBackwardsBit 11) (defconstant $kSupportIndexRatioBit 12) (defconstant $kSupportsEnumerationContinueBit 13) (defconstant $kSupportsLookupContinueBit 14) (defconstant $kSupportsEnumerateAttributeTypeContinueBit 15) (defconstant $kSupportsEnumeratePseudonymContinueBit 16) (defconstant $kSupportsAliasesBit 17) (defconstant $kSupportsPseudonymsBit 18) (defconstant $kSupportsPartialPathNamesBit 19) (defconstant $kSupportsAuthenticationBit 20) (defconstant $kSupportsProxiesBit 21) (defconstant $kSupportsFindRecordBit 22) ; values of DirGestalt (defconstant $kSupportsDNodeNumberMask #X1); 1<<kSupportsDNodeNumberBit (defconstant $kSupportsRecordCreationIDMask #X2); 1<<kSupportsRecordCreationIDBit (defconstant $kSupportsAttributeCreationIDMask #X4); 1<<kSupportsAttributeCreationIDBit (defconstant $kSupportsMatchAllMask #X8); 1<<kSupportsMatchAllBit (defconstant $kSupportsBeginsWithMask #X10); 1<<kSupportsBeginsWithBit (defconstant $kSupportsExactMatchMask #X20); 1<<kSupportsExactMatchBit (defconstant $kSupportsEndsWithMask #X40); 1<<kSupportsEndsWithBit (defconstant $kSupportsContainsMask #X80); 1<<kSupportsContainsBit (defconstant $kSupportsOrderedEnumerationMask #X100); 1<<kSupportsOrderedEnumerationBit (defconstant $kCanSupportNameOrderMask #X200); 1<<kCanSupportNameOrderBit (defconstant $kCanSupportTypeOrderMask #X400); 1<<kCanSupportTypeOrderBit (defconstant $kSupportSortBackwardsMask #X800); 1<<kSupportSortBackwardsBit (defconstant $kSupportIndexRatioMask #X1000); 1<<kSupportIndexRatioBit (defconstant $kSupportsEnumerationContinueMask #X2000); 1<<kSupportsEnumerationContinueBit (defconstant $kSupportsLookupContinueMask #X4000); 1<<kSupportsLookupContinueBit (defconstant $kSupportsEnumerateAttributeTypeContinueMask #X8000); 1<<kSupportsEnumerateAttributeTypeContinueBit (defconstant $kSupportsEnumeratePseudonymContinueMask #X10000); 1<<kSupportsEnumeratePseudonymContinueBit (defconstant $kSupportsAliasesMask #X20000); 1<<kSupportsAliasesBit (defconstant $kSupportsPseudonymsMask #X40000); 1<<kSupportsPseudonymsBit (defconstant $kSupportsPartialPathNamesMask #X80000); 1<<kSupportsPartialPathNamesBit (defconstant $kSupportsAuthenticationMask #X100000); 1<<kSupportsAuthenticationBit (defconstant $kSupportsProxiesMask #X200000); 1<<kSupportsProxiesBit (defconstant $kSupportsFindRecordMask #X400000); 1<<kSupportsFindRecordBit ; Values of AuthLocalIdentityOp (defconstant $kAuthLockLocalIdentityOp 1) (defconstant $kAuthUnlockLocalIdentityOp 2) (defconstant $kAuthLocalIdentityNameChangeOp 3) ; Values of AuthLocalIdentityLockAction (defconstant $kAuthLockPending 1) (defconstant $kAuthLockWillBeDone 2) ; Values of AuthNotifications (defconstant $kNotifyLockBit 0) (defconstant $kNotifyUnlockBit 1) (defconstant $kNotifyNameChangeBit 2) (defconstant $kNotifyLockMask #X1); 1<<kNotifyLockBit (defconstant $kNotifyUnlockMask #X2); 1<<kNotifyUnlockBit (defconstant $kNotifyNameChangeMask #X4); 1<<kNotifyNameChangeBit (defconstant $kPersonalDirectoryFileCreator :|kl03|) (defconstant $kPersonalDirectoryFileType :|pabt|) (defconstant $kBusinessCardFileType :|bust|) (defconstant $kDirectoryFileType :|dirt|) (defconstant $kDNodeFileType :|dnod|) (defconstant $kDirsRootFileType :|drtt|) (defconstant $kRecordFileType :|rcrd|) (def-mactype :DIRSORTOPTION (find-mactype :SIGNED-INTEGER)) (def-mactype :DIRSORTDIRECTION (find-mactype :SIGNED-INTEGER)) (def-mactype :CATEGORYMASK (find-mactype :SIGNED-LONG)) (def-mactype :ACCESSMASK (find-mactype :SIGNED-LONG)) (def-mactype :DIRGESTALT (find-mactype :SIGNED-LONG)) (def-mactype :AUTHLOCALIDENTITYOP (find-mactype :SIGNED-LONG)) (def-mactype :AUTHLOCALIDENTITYLOCKACTION (find-mactype :SIGNED-LONG)) (def-mactype :AUTHNOTIFICATIONS (find-mactype :SIGNED-LONG)) (defrecord DNodeID (dNodeNumber :SIGNED-LONG) ; dNodenumber (reserved1 :SIGNED-LONG) (name (:POINTER :RSTRING)) (reserved2 :SIGNED-LONG) ) (defrecord DirEnumSpec (enumFlag :SIGNED-LONG) (indexRatio :SIGNED-INTEGER) ; Approx Record Position between 1 and 100 If supported, 0 If not supported (:variant ((recordIdentifier :LOCALRECORDID)) ((dNodeIdentifier :DNODEID)) )) (defrecord DirMetaInfo (info (:ARRAY :SIGNED-LONG 4)) ) (defrecord SLRV (script :SIGNED-INTEGER) ; Script code in which entries are sorted (language :SIGNED-INTEGER) ; Language code in which entries are sorted (regionCode :SIGNED-INTEGER) ; Region code in which entries are sorted (version :SIGNED-INTEGER) ; version of oce sorting software ) ; Directory types and operations (def-mactype :AUTHIDENTITY (find-mactype :SIGNED-LONG)); unique identifier for an identity (def-mactype :LOCALIDENTITY (find-mactype :SIGNED-LONG)); Umbrella LocalIdentity (defrecord DESKey ; A DES key is 8 bytes of data (a :SIGNED-LONG) (b :SIGNED-LONG) ) (def-mactype :RC4KEY (find-mactype :ARRAY)) (def-mactype :AUTHKEYTYPE (find-mactype :SIGNED-LONG)) (defrecord AuthKey ; key type followed by its data (keyType :SIGNED-LONG) (:variant ((des :DESKEY)) ((rc4 (:ARRAY :UNSIGNED-BYTE 8))) ; (:ARRAY :UNSIGNED-BYTE (- #$KRC4KEYSIZEINBYTES 1 -1)) )) (def-mactype :AUTHKEYPTR (find-mactype :POINTER)) ; ; This header is common to all the parameter blocks. Clients should not directly ; touch any of these fields except ioCompletion. ioCompletion is the ; completion routine pointer for async calls; it is ignored for sync calls. ; ioResult is the result code from the call. ; (defrecord AuthDirParamHeader (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) ) ; **************************************************************************** ; ; Authentication Manager operations ; ; **************************************************************************** ; ; kAuthResolveCreationID: ; userRecord will contain the user information whose creationID has to be ; returned. A client must make this call when he does not know the creaitionID. ; The creationID must be set to nil before making the call. The server will attempt ; to match the recordid's in the data base which match the user name and ; type in the record. Depending on number of matchings, following ; results will be returned. ; Exactly One Match : CreationID in RecordID and also in buffer (if buffer is given) ; totalMatches = actualMatches = 1. ; > 1 Match: ; Buffer is Large Enough: ; totalMatches = actualMatches ; Buffer will contain all the CIDs, kOCEAmbiguousMatches error. ; > 1 Match: ; Buffer is not Large Enough: ; totalMatches > actualMatches ; Buffer will contain all the CIDs (equal to actualMatches), daMoreDataError error. ; 0 Matches: ; kOCENoSuchRecord error ; (defrecord AuthResolveCreationIDPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user (bufferLength :SIGNED-LONG) ; --> Buffer Size to hold duplicate Info (buffer :POINTER) ; --> Buffer to hold duplicate Info (totalMatches :SIGNED-LONG) ; <-- Total Number of matching names found (actualMatches :SIGNED-LONG) ; <-- Number of matches returned in the buffer ) ; ; kAuthBindSpecificIdentity: ; userRecord will contain the user information whose identity has to be ; verified. userKey will contain the userKey. An Identity is returned which ; binds the key and the userRecord. The identity returned can be used in the 'identity' ; field in the header portion (AuthDirParamHeader) for authenticating the Directory and ; Authentication manager calls. ; (defrecord AuthBindSpecificIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; <-- binding identity (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user (userKey (:POINTER :AUTHKEY)); --> OCE Key for the user ) ; ; kAuthUnbindSpecificIdentity: ; This call will unbind the userRecord and key which were bind earlier. ; (defrecord AuthUnbindSpecificIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> identity to be deleted ) ; ; kAuthGetSpecificIdentityInfo: ; This call will return the userRecord for the given identity. Note: key is not ; returned because this would compromise security. ; (defrecord AuthGetSpecificIdentityInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> identity of initiator (userRecord (:POINTER :RECORDID)); <-- OCE name(Record) of the user ) ; ; kAuthAddKey: ; userRecord will contain the user information whose identity has to be ; created. userKey will point to the key to be created. password points to ; an RString containing the password used to generate the key. ; (defrecord AuthAddKeyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user (userKey (:POINTER :AUTHKEY)); <-- OCE Key for the user (password (:POINTER :RSTRING)); --> Pointer to password STRING ) ; ; kAuthChangeKey: ; userRecord will contain the user information whose identity has to be ; created. userKey will point to the key to be created. password points to ; an RString containing the password used to generate the key. ; (defrecord AuthChangeKeyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user (userKey (:POINTER :AUTHKEY)); <-- New OCE Key for the user (password (:POINTER :RSTRING)); -->Pointer to the new password STRING ) ; ; AuthDeleteKey: ; userRecord will contain the user information whose Key has to be deleted. ; (defrecord AuthDeleteKeyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user ) ; AuthPasswordToKey: Converts an RString into a key. (defrecord AuthPasswordToKeyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userRecord (:POINTER :RECORDID)); --> OCE name(Record) of the user (key (:POINTER :AUTHKEY)) ; <-- (password (:POINTER :RSTRING)); -->Pointer to the new password STRING ) ; ; kAuthGetCredentials: ; userRecord will contain the user information whose identity has to be ; kMailDeletedMask. keyType (e.g. asDESKey) will indicate what type of key has to ; be deleted. ; (defrecord AuthGetCredentialsPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> identity of initiator (recipient (:POINTER :RECORDID)); --> OCE name of recipient (sessionKey (:POINTER :AUTHKEY)); <-- session key (expiry :SIGNED-LONG) ; <--> desired/actual expiry (credentialsLength :SIGNED-LONG); <--> max/actual credentials size (credentials :POINTER) ; <-- buffer where credentials are returned ) ; ; AuthDecryptCredentialsPB: ; Changes: ; userKey is changed userIdentity. ; userRecord is changed to initiatorRecord. User must supply buffer ; to hold initiatorRecord. ; agentList has changed to agent. There wil be no call back. ; User must supply buffer to hold agent Record. ; An additional BOOLEAN parameter 'hasAgent' is included. ; Toolbox will set this if an 'Agent' record is found in the ; credentials. If RecordIDPtr is 'nil', no agent record will ; be copied. However user can examine 'hasAgent', If true user ; can reissue this call with apprpriate buffer for getting a recordID. ; agent has changed to intermediary. User must supply buffer to hold ; intermediary Record. The toolbox will set 'hasIntermediary' if an ; 'intermediary' record is found in the credentials. ; (defrecord AuthDecryptCredentialsPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> user's Identity (initiatorRecord (:POINTER :RECORDID)); <-- OCE name of the initiator (sessionKey (:POINTER :AUTHKEY)); <-- session key (expiry :SIGNED-LONG) ; <-- credentials expiry time (credentialsLength :SIGNED-LONG); --> actual credentials size (credentials :POINTER) ; --> credentials to be decrypted (issueTime :SIGNED-LONG) ; <-- credentials expiry time (hasIntermediary :BOOLEAN) ; <-- if true, An intermediary Record was found in credentials (intermediary (:POINTER :RECORDID)); <-- recordID of the intermediary ) (defrecord AuthMakeChallengePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (key (:POINTER :AUTHKEY)) ; --> UnEncrypted SessionKey (challenge :POINTER) ; <-- Encrypted Challenge (challengeBufferLength :SIGNED-LONG); ->length of challenge buffer (challengeLength :SIGNED-LONG); <-length of Encrypted Challenge ) (defrecord AuthMakeReplyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (key (:POINTER :AUTHKEY)) ; --> UnEncrypted SessionKey (challenge :POINTER) ; --> Encrypted Challenge (reply :POINTER) ; <-- Encrypted Reply (replyBufferLength :SIGNED-LONG); -->length of challenge buffer (challengeLength :SIGNED-LONG); --> length of Encrypted Challenge (replyLength :SIGNED-LONG) ; <-- length of Encrypted Reply ) (defrecord AuthVerifyReplyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (key (:POINTER :AUTHKEY)) ; --> UnEncrypted SessionKey (challenge :POINTER) ; --> Encrypted Challenge (reply :POINTER) ; --> Encrypted Reply (challengeLength :SIGNED-LONG); --> length of Encrypted Challenge (replyLength :SIGNED-LONG) ; --> length of Encrypted Reply ) ; ; kAuthGetUTCTime: ; RLI will contain a valid RLI for a cluster server. ; UTC(GMT) time from one of the cluster server will be returned. ; An 'offSet' from UTC(GMT) to Mac Local Time will also be returned. ; If RLI is nil Map DA is used to determine UTC(GMT). ; Mac Local Time = theUTCTime + theUTCOffset. ; (defrecord AuthGetUTCTimePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; --> packed RLI of the Node, whose server's UTC is requested (theUTCTime :SIGNED-LONG) ; <-- current UTC(GMT) Time utc seconds since 1/1/1904 (theUTCOffset :SIGNED-LONG) ; <-- offset from UTC(GMT) seconds EAST of Greenwich ) ; ; kAuthMakeProxy: ; A user represented bu the 'userIdentity' can make a proxy using this call. ; 'recipient' is the RecordID of the recipient whom user is requesting proxy. ; 'intermediary' is the RecordID of the intermediary holding proxy for the user. ; 'firstValid' is time at which proxy becomes valid. ; 'expiry' is the time at which proxy must expire. ; 'proxyLength' will have the length of the buffer pointed by 'proxy' as input. ; When the call completes, it will hold the actual length of proxy. If the ; call completes 'kOCEMoreData' error, client can reissue the call with the ; buffer size as 'proxyLength' returned. ; expiry is a suggestion, and may be adjusted to be earlier by the ADAP/OCE server. ; The 'proxy' obtained like this might be used by the 'intermediary' to obtain credentials ; for the server using TradeProxyForCredentials call. ; authDataLength and authData are intended for possible future work, but are ; ignored for now. ; (defrecord AuthMakeProxyPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> identity of principal (recipient (:POINTER :RECORDID)); --> OCE name of recipient (firstValid :SIGNED-LONG) ; --> time at which proxy becomes valid (expiry :SIGNED-LONG) ; --> time at which proxy expires (authDataLength :SIGNED-LONG); --> size of authorization data (authData :POINTER) ; --> pointer to authorization data (proxyLength :SIGNED-LONG) ; <--> max/actual proxy size (proxy :POINTER) ; <--> buffer where proxy is returned (intermediary (:POINTER :RECORDID)); --> RecordID of intermediary ) ; ; kAuthTradeProxyForCredentials: ; Using this call, intermediary holding a 'proxy' for a recipient may obtain credentials ; for that recipient. 'userIdentity' is the identity for the 'intermediary'. ; 'recipient' is the RecordID for whom credetials are requested. ; 'principal' is the RecordID of the user who created the proxy. ; 'proxyLength' is the length of data pointed by 'proxy. ; If the call is succesfull, credentials will be returned in the ; buffer pointed by 'credentials'. 'expiry' is the desired expiry time at input. ; When call succeds this will have expiry time of credentials. ; This is very similar to GetCredentials except that we (course: of) need the proxy, ; but we also need the name of the principal who created the proxy. ; (defrecord AuthTradeProxyForCredentialsPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (userIdentity :SIGNED-LONG) ; --> identity of intermediary (recipient (:POINTER :RECORDID)); --> OCE name of recipient (sessionKey (:POINTER :AUTHKEY)); <-- session key (expiry :SIGNED-LONG) ; <--> desired/actual expiry (credentialsLength :SIGNED-LONG); <--> max/actual credentials size (credentials :POINTER) ; <--> buffer where credentials are returned (proxyLength :SIGNED-LONG) ; --> actual proxy size (proxy :POINTER) ; --> buffer containing proxy (principal (:POINTER :RECORDID)); --> RecordID of principal ) ; API for Local Identity Interface ; ; AuthGetLocalIdentityPB: ; A Collaborative application intended to work under the umbrella of LocalIdentity ; for the OCE toolbox will have to make this call to obtain LocalIdentity. ; If LocalIdentity has not been created, then application will get ; 'daLocalIdentityNotExistsErr'. The calling application then guide the user to ; Login by making SDPPromptForLocalIdentity call. ; If the LocalIdentity has not been setup, then calling application will ; receieve 'daOCESetupRequiredErr'. In this case application should put the dialog ; recommended by the OCE Setup document and guide the user through OCE Setup. ; If a backGround application or stand alone code requires LocalIdentity, if it gets the ; OSErr from LocalIdentity and can not call SDPPromptForLocalIdentity, it should it self ; register with the toolbox using kAuthAddToLocalIdentityQueue call. It will be notified ; when a LocalIdentity gets created by a foreground application. ; (defrecord AuthGetLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (theLocalIdentity :SIGNED-LONG); <-- LocalIdentity ) ; ; kAuthUnlockLocalIdentity: ; The LocalIdentity can be created using this call. ; The userName and password correspond to the LocalIdentity setup. ; If the password matches, then collabIdentity will be returned. ; Typically SDPPromptForLocalIdentity call will make this call. ; All applications which are registered through kAuthAddToLocalIdentityQueue ; will be notified. ; (defrecord AuthUnlockLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (theLocalIdentity :SIGNED-LONG); <-- LocalIdentity (userName (:POINTER :RSTRING)); --> userName (password (:POINTER :RSTRING)); -->user password ) ; ; kAuthLockLocalIdentity: ; With this call existing LocalIdentity can be locked. If the ASDeleteLocalIdetity ; call fails with 'kOCEOperationDenied' error, name will contain the application which ; denied the operation. This name will be supplied by the application ; when it registered through kAuthAddToLocalIdentityQueue call ; (defrecord AuthLockLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (theLocalIdentity :SIGNED-LONG); --> LocalIdentity (name (:POINTER (:STRING 255))); <-- name of the app which denied delete ) (def-mactype :NOTIFICATIONPROC (find-mactype :POINTER)) ; FUNCTION NotificationProc(clientData: LONGINT; callValue: AuthLocalIdentityOp; ; actionValue: AuthLocalIdentityLockAction; identity: LocalIdentity): BOOLEAN; ; ; kAuthAddToLocalIdentityQueue: ; An application requiring notification of locking/unlocking of the ; LocalIdentity can install itself using this call. The function provided ; in 'notifyProc' will be called whenever the requested event happens. ; When an AuthLockLocalIdentity call is made to the toolbox, the notificationProc ; will be called with 'kAuthLockPending'. The application may refuse the lock by returning ; a 'true' value. If all the registered entries return 'false' value, locking will be done ; successfully. Otherwise 'kOCEOperationDenied' error is returned to the caller. The appName ; (registered with the notificationProc) of the application which denied locking is also ; returned to the caller making the AuthLockIdentity call. ; (defrecord AuthAddToLocalIdentityQueuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (notifyProc :POINTER) ; --> notification procedure (notifyFlags :SIGNED-LONG) ; --> notifyFlags (appName (:POINTER (:STRING 255))); --> name of application to be returned in Delete/Stop ) ; ; kAuthRemoveFromLocalIdentityQueue: (defrecord AuthRemoveFromLocalIdentityQueuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (nofityProc :POINTER) ; --> notification procedure ) ; ; kAuthSetupLocalIdentity: ; The LocalIdentity can be Setup using this call. ; The userName and password correspond to the LocalIdentity setup. ; If a LocalIdentity Setup already exists 'kOCELocalIdentitySetupExists' error ; will be returned. ; (defrecord AuthSetupLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aReserved :SIGNED-LONG) ; -- (userName (:POINTER :RSTRING)); --> userName (password (:POINTER :RSTRING)); -->user password ) ; ; kAuthChangeLocalIdentity: ; An existing LocalIdentity Setup can be changed using this call. ; The userName and password correspond to the LocalIdentity setup. ; If a LocalIdentity Setup does not exists 'kOCELocalIdentityNotSetup' error ; will be returned. The user can use kAuthSetupLocalIdentity call to setit up. ; If the 'password' does not correspond to the existing setup, 'kOCELocalAuthenticationFail' ; OSErr will be returned. If successful, LocalID will have new name as 'userName' and ; password as 'newPassword'. ; (defrecord AuthChangeLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aReserved :SIGNED-LONG) ; -- (userName (:POINTER :RSTRING)); --> userName (password (:POINTER :RSTRING)); --> current password (newPassword (:POINTER :RSTRING)); --> new password ) ; ; kAuthRemoveLocalIdentity: ; An existing LocalIdentity Setup can be removed using this call. ; The userName and password correspond to the LocalIdentity setup. ; If a LocalIdentity Setup does not exists 'kOCELocalIdentityNotSetup' error ; will be returned. ; If the 'password' does not correspond to the existing setup, 'kOCELocalAuthenticationFail' ; OSErr will be returned. If successful, LocalIdentity will be removed from the OCE Setup. ; This is a very distructive operation, user must be warned enough before actually making ; this call. ; (defrecord AuthRemoveLocalIdentityPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aReserved :SIGNED-LONG) ; -- (userName (:POINTER :RSTRING)); --> userName (password (:POINTER :RSTRING)); --> current password ) ; ; kOCESetupAddDirectoryInfo: ; Using this call identity for a directory can be setup under LocalIdentity umbrella. ; ASCreateLocalIdentity should have been done succesfully before making this call. ; directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or ; DirAddDSAMDirectory call was made. ; rid-> is the recordID in which the identity for the directory will be established. ; password-> the password associated with the rid in the directory world. ; (defrecord OCESetupAddDirectoryInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryRecordCID :CREATIONID); --> CreationID for the directory (recordID (:POINTER :RECORDID)); --> recordID for the identity (password (:POINTER :RSTRING)); --> password in the directory world ) ; ; kOCESetupChangeDirectoryInfo: ; Using this call an existing identity for a directory under LocalIdentity umbrella ; can be changed. ; ASCreateLocalIdentity should have been done succesfully before making this call. ; directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or ; DirAddDSAMDirectory call was made. ; rid-> is the recordID in which the identity for the directory will be established. ; password-> the password associated with the rid in the directory world. ; newPassword -> the new password for the directory ; (defrecord OCESetupChangeDirectoryInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryRecordCID :CREATIONID); --> CreationID for the directory (recordID (:POINTER :RECORDID)); --> recordID for the identity (password (:POINTER :RSTRING)); --> password in the directory world (newPassword (:POINTER :RSTRING)); --> new password in the directory ) ; ; kOCESetupRemoveDirectoryInfo: ; Using this call an existing identity for a directory under LocalIdentity umbrella ; can be changed. ; ASCreateLocalIdentity should have been done succesfully before making this call. ; directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or ; (defrecord OCESetupRemoveDirectoryInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryRecordCID :CREATIONID); --> CreationID for the directory ) ; ; kOCESetupGetDirectoryInfo: ; Using this call info on an existing identity for a particular directory under LocalIdentity umbrella ; can be obtained. ; For the specified directory 'directoryName' and 'discriminator', rid and nativeName will ; returned. Caller must provide appropriate buffer to get back rid and nativeName. ; 'password' will be returned for non-ADAP Directories.. ; (defrecord OCESetupGetDirectoryInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminator for the directory (recordID (:POINTER :RECORDID)); <-- rid for the directory identity (nativeName (:POINTER :RSTRING)); <-- user name in the directory world (password (:POINTER :RSTRING)); <-- password in the directory world ) ; **************************************************************************** ; ; ; Directory Manager operations ; ; ; **************************************************************************** ; AddRecord (defrecord DirAddRecordPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> CreationID returned here (allowDuplicate :BOOLEAN) ; --> ) ; DeleteRecord (defrecord DirDeleteRecordPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> ) ; aRecord must contain valid PackedRLI and a CreationID. ; ******************************************************************************** ; ; DirEnumerate: ; This call can be used to enumerate both DNodes and records under a specified ; DNode. A DNode is specified by the PackedRLIPtr 'aRLI'. ; ; startingPoint indicates where to start the enumeration. Initially, ; it should be set to a value of nil. After some records are enumerated, ; the client can issue the call again with the same aRLI and recordName and ; typeList. The last received DirEnumSpec in the startingPoint field. The server ; will continue the enumeration from that record on. if user wants to get back the ; value specified in the startingRecord also, the BOOLEAN 'includeStartingPoint' ; must be set to 'true'. If this is set to 'false', records specified after the ; startingPoint record will be returned. ; ; sortBy indicates to the server to return the records that match in name-first ; or type-first order. sortDirection indicates to the server to search in forward ; or backward sort order for RecordIDs Specified. ; ; RecordIDS and Enumeration Criteria: ; ; PackedRLIPtr parameter 'aRLI' will be accepted for DNode ; specification. ; ; One RStringPtr 'recordName' is provided. User is allowed to ; specify a wild card in the name. ; ; 'typeCount' parameter indicate how many types are in the 'typeList'. ; ; 'typeList' parmeter is a pointer to an RString array of size 'typeCount'. ; ; If 'typeCount' is exactly equal to one, a wild card can be specified ; for the entity type; otherwise types have to be completely specified. ; ; A nil value for 'startingPoint' is allowed when sortDirection specified ; is 'kSortBackwards'. This was not allowed previously. ; ; 'enumFlags' parameter is a bit field. The following bits can be set: ; kEnumDistinguishedNameMask to get back records in the cluster data base. ; kEnumAliasMask to get back record aliases ; kEnumPseudonymMask to get back record pseudonyms ; kEnumDNodeMask to get back any children dNodes for the DNode specified in the ; 'aRLI' parameter. ; kEnumAll is combination of all four values and can be used to enumerate ; everything under a specified DNode. ; ; 'requestScriptCode' is input parameter and should be ignored in the Release 1.0 ; by all directories (including DSAM directories). However clients are advised to ; set this to desired valid script code for future compatibility. ; ; 'responseScriptCode' is output parameter and this will be set when ; DirEnumerateGet call completes successfully (includes kOCEMoreData error case). ; If the 'responseScriptCode' is one of the defined script codes, it indicates ; that entries are sorted in that script code. This value need not be equal to ; the 'requsetScriptCode'. If the value returned is smInvalidScript, then the ; sort order returned can be determined by the feature flags for that directory. ; This may indicate entries may be sorted in some order or not sorted in any ; particular order. ; ; ; The results returned for each element will consist of a DirEnumSpec. ; The DirEnumSpec contains 'enumFlag' which indicates the type of entity and a ; union which will have either DNodeID or LocalRecordID depending on the value of 'enumFlag'. ; The 'enumFlag' will indicate whether the returned element is a ; record(bit: kEnumDistinguishedNameMask) or a alias(bit: kEnumAliasMask) or a ; Pseudonym(kEnumPseudonymMask) or a child DNode(bit: kEnumChildMask). If the 'enumFlag' value ; is kEnumChildMask, it indicates the value returned in the union is a DNodeID (i.e. 'dNodeNumber' ; is the 'dNodeNumber' of the child dnode(if the directory supports dNodeNumbers, otherwise ; this will be set to zero). The name will be the child dnode name. For other values of the ; 'enumFlag', the value in the union will be LocalRecordID. ; ; ; The results will be collected in the 'getBuffer' supplied by the user. ; If buffer can not hold all the data returned 'kOCEMoreData' error will be returned. ; ; If user receives 'noErr' or 'kOCEMoreData', buffer will contain valid results. A user ; can extract the results in the 'getBuffer' by making DirEnumerateParse' call. ; (defrecord DirEnumerateGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRLI (:POINTER :PACKEDRLI)) ; --> an RLI specifying the cluster to be enumerated (startingPoint (:POINTER :DIRENUMSPEC)); --> (sortBy :SIGNED-INTEGER) ; --> (sortDirection :SIGNED-INTEGER); --> (dReserved :SIGNED-LONG) ; -- (nameMatchString (:POINTER :RSTRING)); --> name from which enumeration should start (typesList (:HANDLE :RSTRING)); --> list of entity types to be enumerated (typeCount :SIGNED-LONG) ; --> number of types in the list (enumFlags :SIGNED-LONG) ; --> indicates what to enumerate ; ERROR!! Record field INCLUDESTARTINGPOINT declared PACKED BOOLEAN ! (includeStartingPoint :BOOLEAN); --> if true return the record specified in starting point (padByte :UNSIGNED-BYTE) (matchNameHow :UNSIGNED-BYTE); --> Matching Criteria for nameMatchString (matchTypeHow :UNSIGNED-BYTE); --> Matching Criteria for typeList (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> (responseSLRV :SLRV) ; <-- response SLRV ) ; The EnumerateRecords call-back function is defined as follows: (def-mactype :FOREACHDIRENUMSPEC (find-mactype :POINTER)) ; FUNCTION ForEachDirEnumSpec( ; clientData: LONGINT; enumSpec: DirEnumSpec): BOOLEAN; ; ; EnumerateParse: ; After an EnumerateGet call has completed, call EnumerateParse ; to parse through the buffer that was filled in EnumerateGet. ; ; 'eachEnumSpec' will be called each time to return to the client a ; DirEnumSpec that matches the pattern for enumeration. 'enumFlag' indicates the type ; of information returned in the DirEnumSpec ; The clientData parameter that you pass in the parameter block will be passed ; to 'forEachEnumDSSpecFunc'. You are free to put anything in clientData - it is intended ; to allow you some way to match the call-back to the original call (example: for; you make more then one aysynchronous EnumerateGet calls and you want to ; associate returned results in some way). ; ; The client should return FALSE from 'eachEnumSpec' to continue ; processing of the EnumerateParse request. Returning TRUE will ; terminate the EnumerateParse request. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the EnumerateParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of EnumerateParse: ; if EnumerateParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirEnumerateParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRLI (:POINTER :PACKEDRLI)) ; --> an RLI specifying the cluster to be enumerated (bReserved :SIGNED-LONG) ; -- (cReserved :SIGNED-LONG) ; -- (eachEnumSpec :POINTER) ; --> (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- (iReserved :SIGNED-LONG) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> (l1Reserved :SIGNED-INTEGER) ; -- (l2Reserved :SIGNED-INTEGER) ; -- (l3Reserved :SIGNED-INTEGER) ; -- (l4Reserved :SIGNED-INTEGER) ; -- ) ; ; FindRecordGet operates similarly to DirEnumerate except it returns a list ; of records instead of records local to a cluster. ; (defrecord DirFindRecordGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (startingPoint (:POINTER :RECORDID)) (reservedA (:ARRAY :SIGNED-LONG 2)) (nameMatchString (:POINTER :RSTRING)) (typesList (:HANDLE :RSTRING)) (typeCount :SIGNED-LONG) (reservedB :SIGNED-LONG) (reservedC :SIGNED-INTEGER) ; ERROR!! Record field MATCHNAMEHOW declared Non-PACKED BYTE ! (matchNameHow :UNSIGNED-BYTE) ; ERROR!! Record field MATCHTYPEHOW declared Non-PACKED BYTE ! (matchTypeHow :UNSIGNED-BYTE) (getBuffer :POINTER) (getBufferSize :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)) (discriminator :DIRDISCRIMINATOR) ) ; The FindRecordParse call-back function is defined as follows: (def-mactype :FOREACHRECORD (find-mactype :POINTER)) ; FUNCTION ForEachRecord(clientData: LONGINT; enumSpec: DirEnumSpec; ; pRLI: PackedRLIPtr): BOOLEAN; ; ; This PB same as DirFindRecordGet except it includes the callback function ; (defrecord DirFindRecordParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (startingPoint (:POINTER :RECORDID)) (reservedA (:ARRAY :SIGNED-LONG 2)) (nameMatchString (:POINTER :RSTRING)) (typesList (:HANDLE :RSTRING)) (typeCount :SIGNED-LONG) (reservedB :SIGNED-LONG) (reservedC :SIGNED-INTEGER) ; ERROR!! Record field MATCHNAMEHOW declared Non-PACKED BYTE ! (matchNameHow :UNSIGNED-BYTE) ; ERROR!! Record field MATCHTYPEHOW declared Non-PACKED BYTE ! (matchTypeHow :UNSIGNED-BYTE) (getBuffer :POINTER) (getBufferSize :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)) (discriminator :DIRDISCRIMINATOR) (forEachRecordFunc :POINTER) ) ; ; LookupGet: ; ; aRecordList is an array of pointers to RecordIDs, each of which must ; contain valid PackedRLI and a CreationID. recordIDCount is ; the size of this array. ; ; attrTypeList is an array of pointers to AttributeTypes. attrTypeCount is ; the size of this array. ; ; staringRecordIndex is the record from which to continue the lookup. ; If you want to start from first record in the list, this must be 1 (zero: not). ; This value must always be <= recordIDCount. ; ; startingAttributeIndex is the AttributeType from which we want to continue the lookup. ; If you want to start from first attribute in the list, this must be 1 (zero: not). ; This value must always be <= attrTypeCount. ; ; startingAttribute is the value of the attribute value from which we want to ; continue lookup. In case of directories supporting creationIDs, startingAttribute ; may contain only a CID. Other directories may require the entire value. ; If a non-null cid is given and if an attribute value with that cid is not found, this ; call will terminate with kOCENoSuchAttribute error. A client should not make a LookupParse call ; after getting this error. ; ; 'includeStartingPoint' BOOLEAN can be set to 'true' to receive the value specified in the ; startingPoint in the results returned. If this is set to 'false', the value ; specified in the startingAttribute will not be returned. ; ; When LookupGet call fails with kOCEMoreData, the client will be able to find out where the call ended ; with a subsequent LookupParse call. When the LookupParse call completes with kOCEMoreData, ; lastRecordIndex, lastAttributeIndex and lastValueCID will point to the corresponding ; recordID, attributeType and the CreationID of the last value returned successfully. These parameters ; are exactly the same ones for the startingRecordIndex, startingAttributeIndex, and startingAttrValueCID ; so they can be used in a subsequent LookupGet call to continue the lookup. ; ; In an extreme case, It is possible that we had an attribute value that is too large to fit ; in the client's buffer. In such cases, if it was the only thing that we tried to fit ; into the buffer, the client will not able to proceed further because he will not know the ; attributeCID of the attribute to continue with. Also he does not know how big a buffer ; would be needed for the next call to get this 'mondo' attribute value successfully. ; ; to support this, LookupParse call will do the following: ; ; If LookupGet has failed with kOCEMoreData error, LookupParse will check to make sure that ; ForEachAttributeValueFunc has been called at least once. If so, the client has the option ; to continue from that attribute CreationID (for PAB/ADAP) in the next LookupGet call. ; However, if it was not even called once, then the attribute value may be too big to fit in the ; user's buffer. In this case, lastAttrValueCID (lastAttribute) and attrSize are returned in the ; parse buffer and the call will fail with kOCEMoreAttrValue. However, it is possible that ; ForEachAttributeValue was not called because the user does not have read access to some of ; the attributeTypes in the list, and the buffer was full before even reading the creationID of ; any of the attribute values. A kOCEMoreData error is returned. ; ; The Toolbox will check for duplicate RecordIDs in the aRecordList. If found, it will return ; 'daDuplicateRecordIDErr'. ; ; The Toolbox will check for duplicate AttributeTypes in the attrTypeList. If found it will ; return 'daDuplicateAttrTypeErr'. ; (defrecord DirLookupGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecordList (:HANDLE :RECORDID)); --> an array of RecordID pointers (attrTypeList (:HANDLE :ATTRIBUTETYPE)); --> an array of attribute types (cReserved :SIGNED-LONG) ; -- (dReserved :SIGNED-LONG) ; -- (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (recordIDCount :SIGNED-LONG) ; --> (attrTypeCount :SIGNED-LONG) ; --> (includeStartingPoint :BOOLEAN); --> if true return the value specified by the starting indices ; padByte: Byte; (i1Reserved :SIGNED-INTEGER) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> (startingRecordIndex :SIGNED-LONG); --> start from this record (startingAttrTypeIndex :SIGNED-LONG); --> start from this attribute type (startingAttribute :ATTRIBUTE); --> start from this attribute value (pReserved :SIGNED-LONG) ; -- ) ; The Lookup call-back functions are defined as follows: (def-mactype :FOREACHLOOKUPRECORDID (find-mactype :POINTER)); FUNCTION ForEachLookupRecordID(clientData: long; recordID: RecordID): BOOLEAN; (def-mactype :FOREACHATTRTYPELOOKUP (find-mactype :POINTER)); FUNCTION ForEachAttrTypeLookup(clientData: long; attrType: AttributeTypePtr; myAttrAccMask: AccessMask): BOOLEAN; (def-mactype :FOREACHATTRVALUE (find-mactype :POINTER)); FUNCTION ForEachAttrValue(clientData: long; attribute: Attribute): BOOLEAN; ; ; LookupParse: ; ; After a LookupGet call has completed, call LookupParse ; to parse through the buffer that was filled in LookupGet. The ; toolbox will parse through the buffer and call the appropriate call-back routines ; for each item in the getBuffer. ; ; 'eachRecordID' will be called each time to return to the client one of the ; RecordIDs from aRecordList. The clientData parameter that you ; pass in the parameter block will be passed to eachRecordID. ; You are free to put anything in clientData - it is intended to allow ; you some way to match the call-back to the original call (case: in; example: for; you make simultaneous asynchronous LookupGet calls). If you don't ; want to get a call-back for each RecordID (example: for; if you're looking up ; attributes for only one RecordID), pass nil for eachRecordID. ; ; After forEachLocalRecordIDFunc is called, eachAttrType may be called to pass an ; attribute type (one from attrTypeList) that exists in the record specified ; in the last eachRecordID call. If you don't want to get a call-back for ; each AttributeType (example: for; if you're looking up only one attribute type, ; or you prefer to read the type from the Attribute struct during the eachAttrValue ; call-back routine), pass nil for eachAttrType. However access controls may ; prohibit you from reading some attribute types; in that case eachAttrValue ; may not be called even though the value exists. Hence the client should ; supply this call-back function to see the access controls for each attribute type. ; ; This will be followed by one or more calls to eachAttrValue, to pass the ; type, tag, and attribute value. NOTE THIS CHANGE: you are no longer expected to ; pass a pointer to a buffer in which to put the value. Now you get a pointer to ; the value, and you can process it within the call-back routine. ; After one or more values are returned, eachAttrType may be called again to pass ; another attribute type that exists in the last-specified RecordID. ; ; The client should return FALSE from eachRecordID, eachAttrType, and ; eachAttrValue to continue processing of the LookupParse request. Returning TRUE ; from any call-back will terminate the LookupParse request. ; ; If LookupGet has failed with kOCEMoreData error, LookupParse will check to make sure that ; ForEachAttributeValueFunc has been called at least once. If so, the client has the option ; to continue from that attribute CreationID (for PAB/ADAP) in the next LookupGet call. ; However, if it was not even called once, then the attribute value may be too big to fit in the ; user's buffer. In this case, lastAttrValueCID (lastAttribute) and attrSize are returned in the ; parse buffer and the call will fail with kOCEMoreAttrValue. However, it is possible that ; ForEachAttributeValue was not called because the user does not have read access to some of ; the attributeTypes in the list, and the buffer was full before even reading the creationID of ; any of the attribute values. A kOCEMoreData error is returned. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the LookupParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of LookupParse: ; if LookupParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirLookupParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecordList (:HANDLE :RECORDID)); --> must be same from the corresponding Get call (attrTypeList (:HANDLE :ATTRIBUTETYPE)); --> must be same from the corresponding Get call (cReserved :SIGNED-LONG) ; -- (eachRecordID :POINTER) ; --> (eachAttrType :POINTER) ; --> (eachAttrValue :POINTER) ; --> (recordIDCount :SIGNED-LONG) ; --> must be same from the corresponding Get call (attrTypeCount :SIGNED-LONG) ; --> must be same from the corresponding Get call (iReserved :SIGNED-LONG) ; -- (getBuffer :POINTER) ; --> must be same from the corresponding Get call (getBufferSize :SIGNED-LONG) ; --> must be same from the corresponding Get call (lastRecordIndex :SIGNED-LONG); <-- last RecordID processed when parse completed (lastAttributeIndex :SIGNED-LONG); <-- last Attribute Type processed when parse completed (lastAttribute :ATTRIBUTE) ; <-- last attribute value (with this CreationID) processed when parse completed (attrSize :SIGNED-LONG) ; <-- length of the attribute we did not return ) ; AddAttributeValue (defrecord DirAddAttributeValuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (attr (:POINTER :ATTRIBUTE)) ; --> AttributeCreationID returned here ) ; ; aRecord must contain valid PackedRLI and a CreationID. ; ; Instead of passing type, length, and value in three separate ; fields, we take a pointer to an Attribute structure that contains ; all three, and has room for the AttributeCreationNumber. ; The AttributeCreationID will be returned in the attr itself. ; ; The AttributeTag tells the directory service that the attribute is an RString, ; binary, or a RecordID. ; ; ; DeleteAttributeType: ; This call is provided so that an existing AttributeType can be deleted. ; If any attribute values exist for this type, they will all be deleted ; (if the user has access rights to delete the values) and then the attribute type ; will be deleted. Otherwise dsAccessDenied error will be returned. ; (defrecord DirDeleteAttributeTypePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (attrType (:POINTER :ATTRIBUTETYPE)); --> ) ; ; DeleteAttributeValue ; (defrecord DirDeleteAttributeValuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> (attr (:POINTER :ATTRIBUTE)) ; -> ) ; ; ChangeAttributeValue: ; currentAttr ==> the attribute to be changed. For ADAS and PAB CreationID is ; sufficient ; newAttr ==> new value for the attribute. For ADAS and PAB ; CreationID field will be set when ; the call succeesfully completes ; ; aRecord ==> must contain valid PackedRecordLocationInfo and a CreationID. ; (defrecord DirChangeAttributeValuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> (currentAttr (:POINTER :ATTRIBUTE)); -> (newAttr (:POINTER :ATTRIBUTE)); -> ) ; VerifyAttributeValue (defrecord DirVerifyAttributeValuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (attr (:POINTER :ATTRIBUTE)) ; --> ) ; ; aRecord must contain valid PackedRLI and a CreationID. ; ; The attribute type and value are passed in the attribute structure. If the ; attribute CreationID is non-zero, the server will verify that an attribute with ; the specified value and creation number exists in aRecord. If the attribute ; CreationID is zero, the server will verify the attribute by type and value ; alone, and return the attribute CreationID in the Attribute struct if the ; attribute exists. ; ; ; EnumerateAttributeTypesGet: ; The following two calls can be used to enumerate the attribute types present in ; a specified RecordID. The first, EnumerateAttributeTypesGet, processes the request ; and reads the response into getBuffer, as much as will fit. A kOCEMoreData error will ; be returned if the buffer was not large enough. After this call completes, the ; client can call EnumerateAttributeTypesParse (below: see). ; ; The user will able to continue from a startingPoint by setting a startingAttrType. ; Typically, this should be the last value returned in EnumerateAttributeTypesParse call ; when 'kOCEMoreData' is returned. ; ; If 'includeStartingPoint' is true when a 'startingAttrType' is specified, the starting value ; will be included in the results, if it exists. If this is set to false, this value will not ; be included. AttributeTypes following this type will be returned. ; (defrecord DirEnumerateAttributeTypesGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (startingAttrType (:POINTER :ATTRIBUTETYPE)); --> starting point (cReserved :SIGNED-LONG) ; -- (dReserved :SIGNED-LONG) ; -- (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- ; ERROR!! Record field INCLUDESTARTINGPOINT declared PACKED BOOLEAN ! (includeStartingPoint :BOOLEAN); --> if true return the attrType specified by starting point (padByte :UNSIGNED-BYTE) (i1Reserved :SIGNED-INTEGER) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) ; The call-back function is defined as follows: (def-mactype :FOREACHATTRTYPE (find-mactype :POINTER)) ; FUNCTION ForEachAttrType(clientData: long; attrType: AttributeType): BOOLEAN; ; ; EnumerateAttributeTypesParse: ; After an EnumerateAttributeTypesGet call has completed, call EnumerateAttributeTypesParse ; to parse through the buffer that was filled in EnumerateAttributeTypesGet. The ; toolbox will parse through the buffer and call the call-back routine for ; each attribute type in the getBuffer. ; ; The client should return false from eachAttrType to continue ; processing of the EnumerateAttributeTypesParse request. Returning true will ; terminate the EnumerateAttributeTypesParse request. The clientData parameter that ; you pass in the parameter block will be passed to eachAttrType. ; You are free to put anything in clientData - it is intended to allow ; you some way to match the call-back to the original call (case: in; example: for; you make simultaneous asynchronous calls). ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the EnumerateAttributeTypesParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of EnumerateAttributeTypesParse. ; If EnumerateAttributeTypesParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirEnumerateAttributeTypesParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> Same as DirEnumerateAttributeTypesGetPB (bReserved :SIGNED-LONG) ; -- (cReserved :SIGNED-LONG) ; -- (dReserved :SIGNED-LONG) ; -- (eachAttrType :POINTER) ; --> (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- (iReserved :SIGNED-LONG) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) ; ; DirAbort: ; With this call a user will able to abort an outstanding directory service call. ; A user must pass a pointer to the parameter block for the outstanding call. ; In the current version of the product, the toolbox will process this call ; for NetSearchADAPDirectoriesGet or FindADAPDirectoryByNetSearch calls and if possible ; it will abort. For other calls for ADAP and PAB this will return 'daAbortFailErr'. ; For DSAM directories, this call will be passed to the corresponding DSAM driver. ; The DSAM driver may process this call or may return 'daAbortFailErr'. This call can ; be called only in synchronous mode. Since the abort call makes references to fields in ; the pb associated with the original call, this pb must not be disposed or or altered if ; the original call completes before the abort call has completed. ; (defrecord DirAbortPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pb :POINTER) ; --> pb for the call which must be aborted ; ^DirParamBlock ) ; ; AddPseudonym: ; An alternate name and type can be added to a given record. If allowDuplicate ; is set the name and type will be added even if the same name and type already ; exists. ; (defrecord DirAddPseudonymPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> RecordID to which pseudonym is to be added (pseudonymName (:POINTER :RSTRING)); --> new name to be added as pseudonym (pseudonymType (:POINTER :RSTRING)); --> new name to be added as pseudonym (allowDuplicate :BOOLEAN) ; --> ) ; ; DeletePseudonym: ; An alternate name and type for a given record can be deleted. ; (defrecord DirDeletePseudonymPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> RecordID to which pseudonym to be added (pseudonymName (:POINTER :RSTRING)); --> pseudonymName to be deleted (pseudonymType (:POINTER :RSTRING)); --> pseudonymType to be deleted ) ; ; AddAlias: ; This call can be used to create an alias record. The alias ; can be created either in the same or different cluster. ADAS will not support ; this call for this release. A new directory capability flag 'kSupportsAlias' will indicate ; if the directory supports this call. PAB's will support this call. For the PAB implementation, ; this call will create a record with the name and type specified an aRecord. ; This call works exactly like AddRecord. ; If 'allowDuplicate' is false and another record with same name and type already exists ; 'daNoDupAllowed' error will be returned. ; (defrecord DirAddAliasPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> (allowDuplicate :BOOLEAN) ; -> ) ; ; DirFindValue: ; This call can be used to find the occurrence of a value. The value ; to be matched is passed in the buffer 'matchingData' field. The current ; ADAP/PAB implementation will match a maximum of 32 bytes of data. ; For attribute values in the PAB/ADAP implementation, only the first 32 bytes will ; be used for comparing the occurrence of data. Search can be restricted to ; a particular record and/or attribute type by specifying 'aRecord' or 'aType'. ; After finding one occurrence, 'startingRecord' and 'startingAttribute' ; can be specified to find the next occurrence of the same value. ; 'sortDirection' can be specified with starting values to search forward or backward. ; When a matching value is found, the 'recordFound' indicates the reccordID in which the ; data occurrence was found, 'attributeFound' indicates the attribute with in which the ; matching data was found. ADAP/PAB implementation returns only the type and creationID of ; attributes. Directories which don't support creationIDs may return the ; complete value; hence this call may need a buffer to hold the data. For ADAP/PAB implementations ; the user has to make a DirLookup call to get the actual data. 'recordFound' and ; 'attributeFound' can be used to initialize 'startingRecord' and 'startingAttribute' to ; find the next occurrence of the value. ; (defrecord DirFindValuePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRLI (:POINTER :PACKEDRLI)) ; --> an RLI specifying the cluster to be enumerated (aRecord (:POINTER :LOCALRECORDID)); --> if not nil, look only in this record (attrType (:POINTER :ATTRIBUTETYPE)); --> if not nil, look only in this attribute type (startingRecord (:POINTER :LOCALRECORDID)); --> record in which to start searching (startingAttribute (:POINTER :ATTRIBUTE)); --> attribute in which to start searching (recordFound (:POINTER :LOCALRECORDID)); <-- record in which data was found (attributeFound :ATTRIBUTE) ; <-- attribute in which data was found (matchSize :SIGNED-LONG) ; --> length of matching bytes (matchingData :POINTER) ; --> data bytes to be matched in search (sortDirection :SIGNED-INTEGER); --> sort direction (forwards or backwards) ) ; ; EnumeratePseudonymGet: ; This call can be used to enumerate the existing pseudonyms for ; a given record specified in 'aRecord'. A starting point can be specified ; by 'startingName' and 'startingType'. If the 'includeStartingPoint' boolean ; is true and a starting point is specified, the name specified by startingName ; and startingType also is returned in the results, if it exists. If this is set to false, ; the pseudonym in startingName and Type is not included. ; Pseudonyms returned in the 'getBuffer' can be extracted by making an ; EnumeratePseudonymParse call. The results will consist of a RecordID with the ; name and type of the pseudonym. If the buffer could not hold all the results, then ; 'kOCEMoreData' error will be returned. The user will be able to continue the call by ; using the last result returned as starting point for the next call. ; (defrecord DirEnumeratePseudonymGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (startingName (:POINTER :RSTRING)); --> (startingType (:POINTER :RSTRING)); --> (dReserved :SIGNED-LONG) ; -- (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- ; ERROR!! Record field INCLUDESTARTINGPOINT declared PACKED BOOLEAN ! (includeStartingPoint :BOOLEAN); --> if true return the Pseudonym specified by ; starting point will be included (padByte :UNSIGNED-BYTE) (i1Reserved :SIGNED-INTEGER) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) ; The call-back function is defined as follows: (def-mactype :FOREACHRECORDID (find-mactype :POINTER)) ; FUNCTION ForEachRecordID(clientData: long; recordID: RecordID): BOOLEAN; ; ; EnumeratePseudonymParse: ; The pseudonyms returned in the 'getBuffer' from the EnumeratePseudonymGet call ; can be extracted by using the EnumeratePseudonymParse call. 'eachRecordID' ; will be called for each pseudonym. ; ; Returning true from any call-back will terminate the EnumeratePseudonymParse call. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the EnumeratePseudonymParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of EnumeratePseudonymParse: ; if EnumeratePseudonymParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirEnumeratePseudonymParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> same as DirEnumerateAliasesGetPB (bReserved :SIGNED-LONG) ; -- (cReserved :SIGNED-LONG) ; -- (eachRecordID :POINTER) ; --> (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- (iReserved :SIGNED-LONG) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) ; GetNameAndType (defrecord DirGetNameAndTypePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> ) ; ; aRecord must contain valid RLI and a CreationID. It ; must also contain pointers to maximum-length RStrings (name and type fields) ; in which will be returned the record's distinguished name and type. ; ; ; SetNameAndType: ; This call can be used to change a name and type for a record. The record ; to be renamed is specified using 'aRecord'. ; 'newName' and 'newType' indicate the name and type to be set. ; 'allowDuplicate' if true indicates that name is to be set even if another ; name and type exactly matches the newName and newType specified. ; ; 'newName' and 'newType' are required since the directories not supporting ; CreationID require name and type fields in the recordID to identify a given ; record. ; (defrecord DirSetNameAndTypePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> ; ERROR!! Record field ALLOWDUPLICATE declared PACKED BOOLEAN ! (allowDuplicate :BOOLEAN) ; --> (padByte :UNSIGNED-BYTE) (newName (:POINTER :RSTRING)); --> new name for the record (newType (:POINTER :RSTRING)); --> new type for the record ) ; ; DirGetMetaRecordInfo: This call can be made to obtain ; the MetaRecordInfo for a given record. Information returned ; is 16 bytes of OPAQUE information about the record. ; (defrecord DirGetRecordMetaInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); --> (metaInfo :DIRMETAINFO) ; <-- ) ; ; DirGetDNodeMetaInfo: This call can be made to obtain ; the DNodeMetaInfo for a given Packed RLI. Information returned ; is 16 bytes of OPAQUE information about the DNode. ; (defrecord DirGetDNodeMetaInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; --> (metaInfo :DIRMETAINFO) ; <-- ) ; ; EnumerateDirectoriesGet: ; A user can enumerate all the directories installed. This includes installed ; ADAP and DSAM directories. The user can specify a signature as input to restrict ; the results. kDirADAPKind will return only ADAP directories, kDirDSAMKind ; will return all DSAM directories. kDirAllKinds will get both ADAP & DSAM directories. ; A specific signature (e.g. X.500) may be used to get directories with an X.500 signature. ; The information for each directory returned will have directoryName, discriminator and features. ; ; If the user receives 'noErr' or 'kOCEMoreData', the buffer will contain valid results. A user ; can extract the results in the 'getBuffer' by making an DirEnumerateDirectories call. ; ; If 'kOCEMoreData' is received, the user can continue enumeration by using the last directory and ; discriminator as startingDirectoryName and staringDirDiscriminator in the next call. ; ; If 'includeStartingPoint' is true and a starting point is specified, ; the staring point will be returned in the result. If false, it is not included. ; (defrecord DirEnumerateDirectoriesGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryKind :SIGNED-LONG) ; --> enumerate directories bearing this signature (startingDirectoryName (:POINTER :DIRECTORYNAME)); --> staring directory name (startingDirDiscriminator :DIRDISCRIMINATOR); --> staring directory discriminator (eReserved :SIGNED-LONG) ; -- (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- ; ERROR!! Record field INCLUDESTARTINGPOINT declared PACKED BOOLEAN ! (includeStartingPoint :BOOLEAN); --> if true return the dir specified by starting point (padByte :UNSIGNED-BYTE) (i1Reserved :SIGNED-INTEGER) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) (def-mactype :FOREACHDIRECTORY (find-mactype :POINTER)) ; FUNCTION ForEachDirectory(clientData: long; dirName: DirectoryNamePtr; ; discriminator: DirDiscriminator; features: DirGestalt): BOOLEAN; ; ; EnumerateDirectoriesParse: ; The directory info returned in 'getBuffer' from the EnumerateDirectoriesGet call ; can be extracted using the EnumerateDirectoriesParse call. 'eachDirectory' will ; be called for each directory. ; ; Returning true from any call-back will terminate the EnumerateDirectoriesParse call. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the EnumerateDirectoriesParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of EnumerateDirectoriesParse: ; if EnumerateDirectoriesParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; ; eachDirectory will be called each time to return to the client a ; DirectoryName, DirDiscriminator, and features for that directory. ; (defrecord DirEnumerateDirectoriesParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aReserved :SIGNED-LONG) ; -- (bReserved :SIGNED-LONG) ; -- (cReserved :SIGNED-LONG) ; -- (dReserved :SIGNED-LONG) ; -- (eachDirectory :POINTER) ; --> (fReserved :SIGNED-LONG) ; -- (gReserved :SIGNED-LONG) ; -- (hReserved :SIGNED-LONG) ; -- (iReserved :SIGNED-LONG) ; -- (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> ) ; ; The Following five call are specific to ADAP Directories. Toolbox ; remembers a list of directories across boots. If any directory service ; call is intended for a ADAP directory, then it must be in the list. ; In order for managing this list, A client (Probably DE will use these ; calls. ; DirAddADAPDirectoryPB: Add a new ADAP directory to the list. ; DirRemoveADAPDirectory: Remove a ADAP directory from the list. ; DirNetSearchADAPDirectoriesGet: search an internet for adas directories. ; DirNetSearchADAPDirectoriesParse: extract the results obtained NetSearchADAPDirectoriesGet. ; DirFindADAPDirectoryByNetSearch: Find a specified directory through net search. ; ; ; NetSearchADAPDirectoriesGet: ; This call can be used to make a network wide search for finding ADAP directories. ; This call will be supported only by 'ADAP' and involve highly expensive ; network operations, so the user is advised to use utmost discretion before ; making this call. The results will be collected in the 'getbuffer' and can be ; extracted using NetSearchADAPDirectoriesParse call. The directoryName, ; the directoryDiscriminator, features and serverHint (AppleTalk address for ; a PathFinder serving that directory) are collected for each directory found ; on the network. If buffer is too small to hold all the directories found on ; the network, a 'kOCEMoreData' error will be returned. ; (defrecord DirNetSearchADAPDirectoriesGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> (cReserved :SIGNED-LONG) ; -- ) (def-mactype :FOREACHADAPDIRECTORY (find-mactype :POINTER)) ; FUNCTION ForEachADAPDirectory( ; clientData: long; dirName: DirectoryNamePtr; ; discriminator: DirDiscriminator; features: DirGestalt; ; serverHint: AddrBlock): BOOLEAN; ; ; DirNetSearchADAPDirectoriesParse: ; This call can be used to extract the results obtained in the 'getBuffer'. ; The directoryName, directoryDiscriminator, features and ; serverHint (AppleTalk address for a PathFinder serving that directory) are ; returned in each call-back. These values may be used to make an ; AddADAPDirectory call. ; ; Returning TRUE from any call-back will terminate the NetSearchADAPDirectoriesParse request. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the DirNetSearchADAPDirectoriesParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of DirNetSearchADAPDirectoriesParse: ; if DirNetSearchADAPDirectoriesParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirNetSearchADAPDirectoriesParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (getBuffer :POINTER) ; --> (getBufferSize :SIGNED-LONG) ; --> (eachADAPDirectory :POINTER) ; --> ) ; ; DirFindADAPDirectoryByNetSearch: ; This call can be used to make a network wide search to find an ADAP directory. ; This call will be supported only by 'ADAP' and involves highly expensive ; network operations, so the user is advised to use utmost discretion before ; making this call. The directory is specified using directoryName and discriminator. ; If 'addToOCESetup' is true, the directory will be automatically added to the setup ; list and will be visible through the EnumerateDirectories call and also ; also a creationID to the directoryRecord will be returned. ; If this parameter is set to 'false', the directory will be added to temporary list ; and will be available for making other directory service calls. The directories ; which are not in the preference directory list will not be visible through the ; EnumerateDirectories call. ; (defrecord DirFindADAPDirectoryByNetSearchPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminate between dup dir names ; ERROR!! Record field ADDTOOCESETUP declared PACKED BOOLEAN ! (addToOCESetup :BOOLEAN) ; --> add this directory to OCE Setup List (padByte :UNSIGNED-BYTE) (directoryRecordCID :CREATIONID); <-- creationID for the directory record ) ; ; DirAddADAPDirectory: ; The directory specified by 'directoryName' and 'discriminator' will be ; added to the list of directories maintained by the Toolbox. Once added, ; the directory is available across boots, until the directory is removed ; explicitly through a DirRemoveADAPDirectory call. ; If 'serverHint' is not nil, the address provided will be used ; to contact a PathFinder for the directory specified. ; If 'serverHint' is nil or does not point to a valid PathFinder server ; for that directory, this call will fail. ; If 'addToOCESetup' is true, the directory will be automatically added to the setup ; directory list and will be visible through EnumerateDirectories calls and ; also a creationID to the directoryRecord will be returned. ; If this parameter is set to 'false', directory will be added to temprary list ; and will be available for making other directory service calls. The directories ; which are not in the setup list will not be visible through ; EnumerateDirectories call. ; (defrecord DirAddADAPDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminate between dup dir names ; ERROR!! Record field ADDTOOCESETUP declared PACKED BOOLEAN ! (addToOCESetup :BOOLEAN) ; --> add this directory to OCE Setup (padByte :UNSIGNED-BYTE) (directoryRecordCID :CREATIONID); <-- creationID for the directory record ) ; ; GetDirectoryInfo: ; DirGetDirectoryInfo will do: ; ; If a 'dsRefNum' is non-Zero, the directory information for ; the corresponding PAB will be returned. ; If 'dsRefNum' is zero and 'serverHint' is non-zero, If the ; 'serverHint' points to a valid ADAP Directory Server(Finder: Path), ; the directory information (i.e. directoryName, discriminator, features) ; for that directory will be returned. ; If a vlid directory name and discriminator are provided ; features (Set of capability flags) for that directory will be returned. ; (defrecord DirGetDirectoryInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); <--> descriminate between dup dir names (features :SIGNED-LONG) ; <-- capability bit flags ) ; ; pass kThisRecordOwnerMask, kFriendsMask, kAuthenticatedInDNodeMask, kAuthenticatedInDirectoryMask, ; kGuestMask, or kMeMask to this routine, and it will return a pointer to a ; DSSpec that can be used in the Get or Set Access Controls calls. ; (deftrap _ocegetaccesscontroldsspec ((categorybitmask :signed-long)) (:stack (:pointer :dsspec)) (:stack-trap #xAA5C :d0 837 categorybitmask)) ; ; Note on Access Controls: ; Access control is based on a list model. ; You can add Access Controls to a dsObject through set calls. ; You can get access controls list which gives dsObject and accMask for each dsObject. ; GetAccessControl can be limited to currently supplied identity by setting forCurrentUserOnly. ; There are special DSObjects are defined in ADASTypes.h for each of the category ; supported in ADAS Directories. (kOwner, kFriends, kAuthenticatedToCluster, ; kAuthenticatedToDirectory, kGuest) and DUGetActlDSSpec call can be used ; to obtain appropraiate DSSpec before making set calls to ADAS directories. ; ; ; GetDNodeAccessControlGet: ; This call can be done to get back access control list for a DNode. ; pRLI -> RLI of the DNode whose access control list is sought ; curUserAccMask -> If this is 'true', Access controls for the user specified by ; the identity parameter will be returned other wise entire list ; will be returned. ; startingDsObj -> If this is not nil, list should be started after this object. ; startingPointInclusive -> If staringDsObj is specified, include that in the returned ; results. ; ; The results will be collected in the 'getBuffer' supplied by the user. ; If buffer can not hold all the data returned 'daMoreData' error will be returned. ; ; If user receives 'noErr' or 'daMoreData', buffer will contain valid results. A user ; can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call. ; ; Results returned for each DSObject will contain DSSpecPtr and three sets of access mask. ; (defrecord DirGetDNodeAccessControlGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; -> RLI of the cluster whose access control list is sought (bReserved :SIGNED-LONG) ; -- unused (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eResreved :SIGNED-LONG) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the DsObject ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; The Access Control call-back function is defined as follows: (def-mactype :FOREACHDNODEACCESSCONTROL (find-mactype :POINTER)) ; FUNCTION ForEachDNodeAccessControl( ; clientData: long; ; dsObj: DSSpec; activeDnodeAccMask: AccessMask; ; defaultRecordAccMask: AccessMask; ; defaultAttributeAccMask: AccessMask): BOOLEAN; ; ; GetDNodeAccessControlParse: ; After an GetDNodeAccessControlGet call has completed, ; call GetDNodeAccessControlParse to parse through the buffer that ; that was filled in GetDNodeAccessControlGet. ; ; 'eachObject' will be called each time to return to the client a ; DsObject and a set of three accMasks (three LONGINT words) for that object. ; Acceesmasks returned apply to the dsObject in the callback : ; 1. Currently Active Access mask for the specified DNode. ; 2. Default Access mask for any Record in the DNode ; 3. Default Access mask for any Attribute in the DNode ; The clientData parameter that you pass in the parameter block will be passed ; to 'eachObject'. You are free to put anything in clientData - it is intended ; to allow you some way to match the call-back to the original call (example: for; you make more then one aysynchronous GetDNodeAccessControlGet calls and you want to ; associate returned results in some way). ; ; The client should return FALSE from 'eachObject' to continue ; processing of the GetDNodeAccessControlParse request. Returning TRUE will ; terminate the GetDNodeAccessControlParse request. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the GetDNodeAccessControlParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of GetDNodeAccessControlParse: ; if GetDNodeAccessControlParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirGetDNodeAccessControlParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; -> RLI of the cluster (bReserved :SIGNED-LONG) ; -- unused (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eachObject :POINTER) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the record ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; ; GetRecordAccessControlGet: ; This call can be done to get back access control list for a RecordID. ; aRecord -> RecordID to which access control list is sought ; curUserAccMask -> If this is 'true', Access controls for the user specified by ; the identity parameter will be returned other wise entire list ; will be returned. ; startingDsObj -> If this is not nil, list should be started after this object. ; startingPointInclusive -> If staringDsObj is specified, include that in the returned ; results. ; ; The results will be collected in the 'getBuffer' supplied by the user. ; If buffer can not hold all the data returned 'daMoreData' error will be returned. ; ; If user receives 'noErr' or 'daMoreData', buffer will contain valid results. A user ; can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call. ; ; Results returned for each DSObject will contain DSSpecPtr and accMask. ; (defrecord DirGetRecordAccessControlGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> RecordID to which access control list is sought list is sought (bReserved :SIGNED-LONG) ; -- unused (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eResreved :SIGNED-LONG) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the DsObject ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; The Access Control call-back function is defined as follows: (def-mactype :FOREACHRECORDACCESSCONTROL (find-mactype :POINTER)) ; FUNCTION ForEachRecordAccessControl(clientData: long; ; dsObj: DSSpec; activeDnodeAccMask: AccessMask; ; activeRecordAccMask: AccessMask; ; defaultAttributeAccMask: AccessMask): BOOLEAN; ; ; GetRecordAccessControlParse: ; After an GetRecordAccessControlGet call has completed, ; call GetRecordAccessControlParse to parse through the buffer that ; that was filled in GetRecordAccessControlGet. ; ; 'eachObject' will be called each time to return to the client a ; DsObject and a set of three accMasks (three LONGINT words) for that object. ; Acceesmasks returned apply to the dsObject in the callback : ; 1. Active Access mask for the DNode Containing the Record. ; 2. Active Access mask for the Record specified. ; 3. Defualt Access mask for Attributes in the record. ; The clientData parameter that you pass in the parameter block will be passed ; to 'eachObject'. You are free to put anything in clientData - it is intended ; to allow you some way to match the call-back to the original call (example: for; you make more then one aysynchronous GetRecordAccessControlGet calls and you want to ; associate returned results in some way). ; ; The client should return FALSE from 'eachObject' to continue ; processing of the GetRecordAccessControlParse request. Returning TRUE will ; terminate the GetRecordAccessControlParse request. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the GetRecordAccessControlParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of GetRecordAccessControlParse: ; if GetRecordAccessControlParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirGetRecordAccessControlParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> RecordID to which access control list is sought list is sought (bReserved :SIGNED-LONG) ; -- unused (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eachObject :POINTER) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the record ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; ; GetAttributeAccessControlGet: ; This call can be done to get back access control list for a attributeType with in a RecordID. ; aRecord -> RecordID to which access control list is sought ; aType -> Attribute Type to which access controls are sought ; curUserAccMask -> If this is 'true', Access controls for the user specified by ; the identity parameter will be returned other wise entire list ; will be returned. ; startingDsObj -> If this is not nil, list should be started after this object. ; startingPointInclusive -> If staringDsObj is specified, include that in the returned ; results. ; ; The results will be collected in the 'getBuffer' supplied by the user. ; If buffer can not hold all the data returned 'daMoreData' error will be returned. ; ; If user receives 'noErr' or 'daMoreData', buffer will contain valid results. A user ; can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call. ; ; Results returned for each DSObject will contain DSSpecPtr and accMask. ; (defrecord DirGetAttributeAccessControlGetPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> RecordID to which access control list is sought list is sought (aType (:POINTER :ATTRIBUTETYPE)); -> Attribute Type to which access controls are sought (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eResreved :SIGNED-LONG) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the DsObject ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; The Access Control call-back function is defined as follows: (def-mactype :FOREACHATTRIBUTEACCESSCONTROL (find-mactype :POINTER)) ; FUNCTION ForEachAttributeAccessControl(clientData: long; ; dsObj: DSSpec; activeDnodeAccMask: AccessMask; ; activeRecordAccMask: AccessMask; ; activeAttributeAccMask: AccessMask): BOOLEAN; ; ; GetAttributeAccessControlParse: ; After an GetAttributeAccessControlGet call has completed, ; call GetAttributeAccessControlParse to parse through the buffer that ; that was filled in GetAttributeAccessControlGet. ; ; 'eachObject' will be called each time to return to the client a ; DsObject and a set of three accMasks (three LONGINT words) for that object. ; Acceesmasks returned apply to the dsObject in the callback : ; 1. Active Access mask for the DNode Containing the Attribute. ; 2. Active Access mask for the Record in the Containing the Attribute. ; 3. Active Access mask for the specified Attribute. ; The clientData parameter that you pass in the parameter block will be passed ; to 'eachObject'. You are free to put anything in clientData - it is intended ; to allow you some way to match the call-back to the original call (example: for; you make more then one aysynchronous GetAttributeAccessControlGet calls and you want to ; associate returned results in some way). ; ; The client should return FALSE from 'eachObject' to continue ; processing of the GetAttributeAccessControlParse request. Returning TRUE will ; terminate the GetAttributeAccessControlParse request. ; ; For synchronous calls, the call-back routine actually runs as part of the same thread ; of execution as the thread that made the GetAttributeAccessControlParse call. That means that the ; same low-memory globals, A5, stack, etc. are in effect during the call-back ; that were in effect when the call was made. Because of this, the call-back ; routine has the same restrictions as the caller of GetAttributeAccessControlParse: ; if GetAttributeAccessControlParse was not called from interrupt level, then the call- ; back routine can allocate memory. For asynchronous calls, call-back routine is ; like a ioCompletion except that A5 will be preserved for the application. ; (defrecord DirGetAttributeAccessControlParsePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (aRecord (:POINTER :RECORDID)); -> RecordID to which access control list is sought list is sought (aType (:POINTER :ATTRIBUTETYPE)); -> Attribute Type to which access controls are sought (cReserved :SIGNED-LONG) ; -- unused (dReserved :SIGNED-LONG) ; -- unused (eachObject :POINTER) ; --> (forCurrentUserOnly :BOOLEAN); --> (startingPoint (:POINTER :DSSPEC)); --> starting Point (includeStartingPoint :BOOLEAN); -> if true return the record ; specified in starting point (getBuffer :POINTER) ; -> (getBufferSize :SIGNED-LONG) ; -> ) ; ; MapPathNameToDNodeNumber: ; This call maps a given PathName within a directory to its DNodeNumber. ; (defrecord DirMapPathNameToDNodeNumberPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminator (dNodeNumber :SIGNED-LONG) ; <-- dNodenumber to the path (path (:POINTER :PACKEDPATHNAME)); --> Path Name to be mapped ) ; ; PathName in the path field will be mapped to the cooresponding dNodeNumber and ; returned in the DNodeNumber field. directoryName and descriminator Fields are ; ignored. DSRefNum is used to identify the directory. ; ; ; MapDNodeNumberToPathName: ; This call will map a given DNodeNumber with in a directory to the ; corresponding PathName. ; (defrecord DirMapDNodeNumberToPathNamePB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminator (dNodeNumber :SIGNED-LONG) ; --> dNodenumber to be mapped (path (:POINTER :PACKEDPATHNAME)); <-- Packed Path Name returned (lengthOfPathName :SIGNED-INTEGER); --> length of packed pathName structure ) ; ; dNodeNumber in the DNodeNumber field will be mapped to the cooresponding ; pathName and returned in the PackedPathName field. ; lengthOfPathName is to be set the length of pathName structure. ; If length of PackedPathName is larger then the lengthOfPathName, kOCEMoreData ; OSErr will be returned. ; ; ; GetLocalNetworkSpec: ; This call will return the Local NetworkSpec. Client should supply ; an RString big enough to hold the NetworkSpec. ; (defrecord DirGetLocalNetworkSpecPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> discriminator (networkSpec (:POINTER :NETWORKSPEC)); <-- NetworkSpec ) ; ; PathName in the path field must be set to nil. internetName should be large ; enough to hold the internetName. InterNetname returned indicates path finder's ; local internet (configured by administrator). ; ; ; GetDNodeInfo: ; This call will return the information (internetName and descriptor) ; for the given RLI of a DNode. ; (defrecord DirGetDNodeInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; --> packed RLI whose info is requested (descriptor :SIGNED-LONG) ; <-- dNode descriptor (networkSpec (:POINTER :NETWORKSPEC)); <-- cluster's networkSpec if kIsCluster ) ; ; If DnodeNumber is set to a non zero value, path should be set to nil. ; if DnodeNumber is set to zero, pathName should point to a packed path name. ; internetName should be large enough to hold ; the internetName. (If the internetName is same as the one got by ; GetLocalInternetName call, it indicates cluster is reachable without ; forwarders, --> Tell me if I am wrong) ; ; ; DirCreatePersonalDirectory: ; A new personal directory can be created by specifying an FSSpec for ; the file. If a file already exists dupFNErr will be returned. This call is ; supported 'synchronous' mode only. ; (defrecord DirCreatePersonalDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (fsSpec :FSSPECPTR) ; --> FSSpec for the PersonalDirectory (fdType :OSTYPE) ; --> file type for the PersonalDirectory (fdCreator :OSTYPE) ; --> file creator for the PersonalDirectory ) ; ; DirOpenPersonalDirectory: ; An existing personal directory can be opened using this call. ; User can specify the personal directory by FSSpec for the AddressBook file. ; 'accessRequested' field specifies open permissions. 'fsRdPerm' & 'fsRdWrPerm' ; are the only accepted open modes for the address book. ; When the call completes successfully, a dsRefNum will be returned. The 'dsRefNum' ; field is in the DSParamBlockHeader. In addittion 'accessGranted' indicates ; actual permission with personal directory is opened and 'features' indicate the capabilty flags ; associated with the personal directory. ; This call is supported 'synchronous' mode only. ; (defrecord DirOpenPersonalDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (fsSpec :FSSPECPTR) ; --> Open an existing PersonalDirectory (accessRequested :CHARACTER) ; --> Open: permissions Requested(byte) (accessGranted :CHARACTER) ; <-- Open: permissions (byte) (Granted) (features :SIGNED-LONG) ; <-- features for PersonalDirectory ) ; ; DirClosePersonalDirectory: This call lets a client close AddressBook opened by DirOpenPersonalDirectory. ; The PersonalDirectory specified by the 'dsRefNum' will be closed. ; This call is supported 'synchronous' mode only. ; (defrecord DirClosePersonalDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) ) ; ; DirMakePersonalDirectoryRLI: With this call a client can make an RLI ; for an PersonalDirectory opened by DirOpenPersonalDirectory Call. ; A packed RLI is created for the PersonalDirectory specified by the 'dsRefNum'. ; If a client has a need to make the AddressBook reference to persistent ; acrross boots it should make use of this call. In the current implementaion ; PackedRLI has an embeeded System7.0 'alias'. If in later time ; If client has a need to make reference to the AddressBook, it must use ; ADAPLibrary call 'DUExtractAlias' and resole the 'alias' to 'FSSpec' and ; make DirOpenPersonalDirectory call to get a 'dsRefNum'. ; 'fromFSSpec' FSPecPtr from which relative alias to be created. If nil, ; absolute alias is created. ; 'pRLIBufferSize' indicates the size of buffer pointed by 'pRLI' ; 'pRLISize' indicates the actual length of 'pRLI'. If the call ; fails with 'kOCEMoreData' error a client can reissue ; this call with a larger buffer of this length. ; 'pRLI' is pointer to the buffer in which 'PackedRLI' is ; returned. ; This call is supported in 'synchronous' mode only. ; (defrecord DirMakePersonalDirectoryRLIPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (fromFSSpec :FSSPECPTR) ; --> FSSpec for creating relative alia (pRLIBufferSize :SIGNED-INTEGER); --> Length of 'pRLI' buffer (pRLISize :SIGNED-INTEGER) ; <-- Length of actual 'pRLI' (pRLI (:POINTER :PACKEDRLI)) ; <-- pRLI for the specified AddressBook ) ; **************************************************************************** ; The calls described below apply only for DSAM Drivers: ; ; The following three calls provide capability to Install/Remove a DSAM at RunTime. ; DirAddDSAM ; DirRemoveDSAM ; DirInstantiateDSAM ; ; The following two calls provide capability to Install/Remove a DSAM Directory at RunTime. ; DirAddDSAMDirectory ; DirRemoveDirectory ; ; DirGetDirectoryIcon call is used by clients to get any special icon associated ; with a DSAM directory. ; ; **************************************************************************** ; ; DirAddDSAM: This call can be used to inorm the availability of a DSAM file ; after discovering the DSAM file. ; dsamName -> is generic DSAM name e.g. Untitled X.500 directory ; dsamSignature -> could be generic DSAM kind e.g. 'X500'. ; fsSpec -> is the FileSpec for the file containing DSAM resources. ; If the call is successfull 'DSAMRecordCID' will be returned. If the ; call returns 'daDSAMRecordCIDExists', record was already there and ; 'dsamRecordCID' will be returned. ; This call can be done only in synchronous mode. ; (defrecord DirAddDSAMPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (dsamRecordCID :CREATIONID) ; <-- CreationID for the DSAM record (dsamName (:POINTER :RSTRING)); --> DSAM name (dsamKind :SIGNED-LONG) ; --> DSAM kind (fsSpec :FSSPECPTR) ; --> FSSpec for the file containing DSAM ) ; ; DirInstantiateDSAM: This call should be used by the DSAM driver in response ; Driver Open call to indicate the toolbox about the availability of the DSAM. ; dsamName -> is generic DSAM name e.g. Untitled X.500 directory ; dsamKind -> could be generic DSAM kind e.g. 'X500'. ; dsamData -> pointer to private DSAMData. This will be paased back to the DSAM ; when the DSAM functions (DSAMDirProc, DSAMDirParseProc, DSAMAuthProc) are called. ; DSAM should already be setup using DirAddDSAM call. ; DSAMDirProc -> This procedure will be called when any directory service ; call intended for the DSAM (other then parse calls) ; DSAMDirParseProc -> This procedure will be called when any of the parse calls ; are called. ; DSAMAuthProc -> This procedure will be called when any of the Authentication Calls ; are made to the DSAM. If the DSAM does not support authentication, this can be nil. ; This call can be done only in synchronous mode. ; (defrecord DirInstantiateDSAMPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (dsamName (:POINTER :RSTRING)); --> dsamName name (dsamKind :SIGNED-LONG) ; --> DSAMKind (dsamData :POINTER) ; --> dsamData (dsamDirProc :POINTER) ; --> of type DSAMDirProc: for directory service calls (dsamDirParseProc :POINTER) ; --> of type DSAMDirParseProc: for directory service parse calls (dsamAuthProc :POINTER) ; --> of type DSAMAuthProc: for authetication service calls ) ; ; DirRemoveDSAM: This call can be used to remove a DSAM file from the OCE Setup. ; dsamRecordCID -> is the creationID of the DSAM record. ; This call can be made only in synchronous mode. ; (defrecord DirRemoveDSAMPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (dsamRecordCID :CREATIONID) ; <-- CreationID for the DSAM record ) ; ; DirAddDSAMDirectory: This call can be used to inorm the availability of a DSAM directory. ; dsamRecordCID -> recordID for the DSAM serving this directory ; directoryName -> name of the directory ; discriminator -> discriminator for the directory ; directoryRecordCID -> If the call is successful, creationID for the record will ; be returned. ; (defrecord DirAddDSAMDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (dsamRecordCID :CREATIONID) ; --> CreationID for the DSAM record (directoryName (:POINTER :DIRECTORYNAME)); --> directory name (discriminator :DIRDISCRIMINATOR); --> dir discriminator (features :SIGNED-LONG) ; --> capabilty flags for the directory (directoryRecordCID :CREATIONID); <-- creationID for the directory record ) ; ; DirRemoveDirectory: This call can be used to inform the toolbox that ; directory specified by 'directoryRecordCID' ; (defrecord DirRemoveDirectoryPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (directoryRecordCID :CREATIONID); --> creationID for the directory record ) ; ; DSGetExtendedDirectoriesInfo:: This call can be used to get ; the information of various foreign directories supported. ; Typically a DE Template may make this call to create a ; Address template or a Gateway may make this call to findout ; directory name space in which MSAM may would support. ; Client will supply a buffer pointed by 'bufferPtr' of size 'bufferLength'. ; When the call completes with 'daMoreData' error, client can examine 'totalEntries' ; returned and reissue the call with increaing buffer. ; Toolbox will findout the private information of each of the Foreign Directories ; by polling DSAM's, Gateways, and MnMServers. The Information returned ; for each directory will be packed in the format: ; ; EachDirectoryData = RECORD ; pRLI: PackedRLIPtr; / packed RLI for the directory ; entnType: OSType; / Entn Type ; hasMailSlot: LONGINT; / If this directory has mail slot this will be 1 otherwise zero ; RealName: ProtoRString; / Packed RString for Real Name (padded to even boundary) ; comment: ProtoRString; / Packed RString holding any comment for Display (padded to even boundary) ; length: LONGINT; / data length ; data CHAR[1..length]; / data padded to even boundary ; END; ; ; ; myData = RECORD ; data: EacDirectoryData [1..numberOfEntries]; / data packed in the above format ; END; ; (defrecord DirGetExtendedDirectoriesInfoPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (buffer :POINTER) ; --> Pointer to a buufer where data will be returned (bufferSize :SIGNED-LONG) ; --> Length of the buffer, Length of actual data will be returned here (totalEntries :SIGNED-LONG) ; <-- Total Number of Directories found (actualEntries :SIGNED-LONG) ; <-- Total Number of Directories entries returned ) ; ; DirGetDirectoryIconPB: With this call a client can find out about ; the icons supported by the Directory. ; Both ADAP and PersonalDirectory will not support this call for now. ; A DSAM can support a call so that DE Extension can use this ; call to find appropriate Icons. ; (defrecord DirGetDirectoryIconPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (pRLI (:POINTER :PACKEDRLI)) ; --> packed RLI for the directory (iconType :OSTYPE) ; --> Type of Icon requested (iconBuffer :POINTER) ; --> Buffer to hold Icon Data (bufferSize :SIGNED-LONG) ; <-> size of buffer to hold icon data ) ; ; DirGetOCESetupRefNum: This call will return 'dsRefnum' for the OCE Setup PersonalDirectory ; and oceSetupRecordCID for the oceSetup Record. ; Clients interested in manipulating OCE Setup PersonalDirectory directly should ; make this call to get 'dsRefNum'. ; 'dsRefNum' will be returned in the standard field in the AuthDirParamHeader. ; (defrecord DirGetOCESetupRefNumPB (qLink :POINTER) (reserved1 :SIGNED-LONG) (reserved2 :SIGNED-LONG) (ioCompletion :POINTER) (ioResult :SIGNED-INTEGER) (saveA5 :SIGNED-LONG) (reqCode :SIGNED-INTEGER) (reserved (:ARRAY :SIGNED-LONG 2)) (serverHint :ADDRBLOCK) (dsRefNum :SIGNED-INTEGER) (callID :SIGNED-LONG) (identity :SIGNED-LONG) (gReserved1 :SIGNED-LONG) (gReserved2 :SIGNED-LONG) (gReserved3 :SIGNED-LONG) (clientData :SIGNED-LONG) (oceSetupRecordCID :CREATIONID); --> creationID for the directory record ) ; *************************************************************************** ; Directory and Authentication control blocks and operation definitions (defrecord AuthParamBlock (:variant ((header :AUTHDIRPARAMHEADER)) ((bindIdentityPB :AUTHBINDSPECIFICIDENTITYPB)) ((unbindIdentityPB :AUTHUNBINDSPECIFICIDENTITYPB)) ((resolveCreationIDPB :AUTHRESOLVECREATIONIDPB)) ((getIdentityInfoPB :AUTHGETSPECIFICIDENTITYINFOPB)) ((addKeyPB :AUTHADDKEYPB)) ((changeKeyPB :AUTHCHANGEKEYPB)) ((deleteKeyPB :AUTHDELETEKEYPB)) ((passwordToKeyPB :AUTHPASSWORDTOKEYPB)) ((getCredentialsPB :AUTHGETCREDENTIALSPB)) ((decryptCredentialsPB :AUTHDECRYPTCREDENTIALSPB)) ((makeChallengePB :AUTHMAKECHALLENGEPB)) ((makeReplyPB :AUTHMAKEREPLYPB)) ((verifyReplyPB :AUTHVERIFYREPLYPB)) ((getUTCTimePB :AUTHGETUTCTIMEPB)) ((makeProxyPB :AUTHMAKEPROXYPB)) ((tradeProxyForCredentialsPB :AUTHTRADEPROXYFORCREDENTIALSPB)) ((getLocalIdentityPB :AUTHGETLOCALIDENTITYPB)) ((unLockLocalIdentityPB :AUTHUNLOCKLOCALIDENTITYPB)) ((lockLocalIdentityPB :AUTHLOCKLOCALIDENTITYPB)) ((localIdentityQInstallPB :AUTHADDTOLOCALIDENTITYQUEUEPB)) ((localIdentityQRemovePB :AUTHREMOVEFROMLOCALIDENTITYQUEUEPB)) ((setupLocalIdentityPB :AUTHSETUPLOCALIDENTITYPB)) ((changeLocalIdentityPB :AUTHCHANGELOCALIDENTITYPB)) ((removeLocalIdentityPB :AUTHREMOVELOCALIDENTITYPB)) ((setupDirectoryIdentityPB :OCESETUPADDDIRECTORYINFOPB)) ((changeDirectoryIdentityPB :OCESETUPCHANGEDIRECTORYINFOPB)) ((removeDirectoryIdentityPB :OCESETUPREMOVEDIRECTORYINFOPB)) ((getDirectoryIdentityInfoPB :OCESETUPGETDIRECTORYINFOPB)) )) (def-mactype :AUTHPARAMBLOCKPTR (find-mactype :POINTER)) (defrecord DirParamBlock (:variant ((header :AUTHDIRPARAMHEADER)) ((addRecordPB :DIRADDRECORDPB)) ((deleteRecordPB :DIRDELETERECORDPB)) ((enumerateGetPB :DIRENUMERATEGETPB)) ((enumerateParsePB :DIRENUMERATEPARSEPB)) ((findRecordGetPB :DIRFINDRECORDGETPB)) ((findRecordParsePB :DIRFINDRECORDPARSEPB)) ((lookupGetPB :DIRLOOKUPGETPB)) ((lookupParsePB :DIRLOOKUPPARSEPB)) ((addAttributeValuePB :DIRADDATTRIBUTEVALUEPB)) ((deleteAttributeTypePB :DIRDELETEATTRIBUTETYPEPB)) ((deleteAttributeValuePB :DIRDELETEATTRIBUTEVALUEPB)) ((changeAttributeValuePB :DIRCHANGEATTRIBUTEVALUEPB)) ((verifyAttributeValuePB :DIRVERIFYATTRIBUTEVALUEPB)) ((findValuePB :DIRFINDVALUEPB)) ((enumeratePseudonymGetPB :DIRENUMERATEPSEUDONYMGETPB)) ((enumeratePseudonymParsePB :DIRENUMERATEPSEUDONYMPARSEPB)) ((addPseudonymPB :DIRADDPSEUDONYMPB)) ((deletePseudonymPB :DIRDELETEPSEUDONYMPB)) ((addAliasPB :DIRADDALIASPB)) ((enumerateAttributeTypesGetPB :DIRENUMERATEATTRIBUTETYPESGETPB)) ((enumerateAttributeTypesParsePB :DIRENUMERATEATTRIBUTETYPESPARSEPB)) ((getNameAndTypePB :DIRGETNAMEANDTYPEPB)) ((setNameAndTypePB :DIRSETNAMEANDTYPEPB)) ((getRecordMetaInfoPB :DIRGETRECORDMETAINFOPB)) ((getDNodeMetaInfoPB :DIRGETDNODEMETAINFOPB)) ((getDirectoryInfoPB :DIRGETDIRECTORYINFOPB)) ((getDNodeAccessControlGetPB :DIRGETDNODEACCESSCONTROLGETPB)) ((getDNodeAccessControlParsePB :DIRGETDNODEACCESSCONTROLPARSEPB)) ((getRecordAccessControlGetPB :DIRGETRECORDACCESSCONTROLGETPB)) ((getRecordAccessControlParsePB :DIRGETRECORDACCESSCONTROLPARSEPB)) ((getAttributeAccessControlGetPB :DIRGETATTRIBUTEACCESSCONTROLGETPB)) ((getAttributeAccessControlParsePB :DIRGETATTRIBUTEACCESSCONTROLPARSEPB)) ((enumerateDirectoriesGetPB :DIRENUMERATEDIRECTORIESGETPB)) ((enumerateDirectoriesParsePB :DIRENUMERATEDIRECTORIESPARSEPB)) ((addADAPDirectoryPB :DIRADDADAPDIRECTORYPB)) ((removeDirectoryPB :DIRREMOVEDIRECTORYPB)) ((netSearchADAPDirectoriesGetPB :DIRNETSEARCHADAPDIRECTORIESGETPB)) ((netSearchADAPDirectoriesParsePB :DIRNETSEARCHADAPDIRECTORIESPARSEPB)) ((findADAPDirectoryByNetSearchPB :DIRFINDADAPDIRECTORYBYNETSEARCHPB)) ((mapDNodeNumberToPathNamePB :DIRMAPDNODENUMBERTOPATHNAMEPB)) ((mapPathNameToDNodeNumberPB :DIRMAPPATHNAMETODNODENUMBERPB)) ((getLocalNetworkSpecPB :DIRGETLOCALNETWORKSPECPB)) ((getDNodeInfoPB :DIRGETDNODEINFOPB)) ; Calls For PersonalDirectoryies ((createPersonalDirectoryPB :DIRCREATEPERSONALDIRECTORYPB)) ((openPersonalDirectoryPB :DIROPENPERSONALDIRECTORYPB)) ((closePersonalDirectoryPB :DIRCLOSEPERSONALDIRECTORYPB)) ((makePersonalDirectoryRLIPB :DIRMAKEPERSONALDIRECTORYRLIPB)) ; Calls For DSAM's ((addDSAMPB :DIRADDDSAMPB)) ((instantiateDSAMPB :DIRINSTANTIATEDSAMPB)) ((removeDSAMPB :DIRREMOVEDSAMPB)) ((addDSAMDirectoryPB :DIRADDDSAMDIRECTORYPB)) ((getExtendedDirectoriesInfoPB :DIRGETEXTENDEDDIRECTORIESINFOPB)) ((getDirectoryIconPB :DIRGETDIRECTORYICONPB)) ; Call to dsRefNum for System(Setup: OCE) PersonalDirectory ((DirGetOCESetupRefNumPB :DIRGETOCESETUPREFNUMPB)) ; Abort a aysnchronous call ((abortPB :DIRABORTPB)) )) (def-mactype :DIRPARAMBLOCKPTR (find-mactype :POINTER)) (def-mactype :DSAMDIRPROC (find-mactype :POINTER)) ; FUNCTION DSAMDirProc( ; dsamData: Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN): OSErr; (def-mactype :DSAMDIRPARSEPROC (find-mactype :POINTER)) ; FUNCTION DSAMDirParseProc( ; dsamData: Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN): OSErr; (def-mactype :DSAMAUTHPROC (find-mactype :POINTER)) ; FUNCTION DSAMAuthProc( ; dsamData: Ptr; pb: AuthParamBlockPtr; async: BOOLEAN): OSErr; ; *********************************************************** ; ; These are the selector values used after the trap dispatch to determine just ; what call the client made to my toolbox. These bear no relationship to the ; procedure numbers used in the client-to-server protocol. ; ; Note: $21C, $21D are used internally ; (defconstant $kAuthBindSpecificIdentity #X200) (defconstant $kAuthUnbindSpecificIdentity #X201) (defconstant $kAuthResolveCreationID #X202) (defconstant $kAuthGetSpecificIdentityInfo #X203) (defconstant $kAuthGetLocalIdentity #X204) (defconstant $kAuthAddToLocalIdentityQueue #X205) (defconstant $kAuthRemoveFromLocalIdentityQueue #X206) (defconstant $kAuthAddKey #X207) (defconstant $kAuthChangeKey #X208) (defconstant $kAuthDeleteKey #X209) (defconstant $kAuthPasswordToKey #X20A) (defconstant $kAuthGetCredentials #X20B) (defconstant $kAuthDecryptCredentials #X20C) (defconstant $kOCESetupRemoveDirectoryInfo #X20D) (defconstant $kOCESetupGetDirectoryInfo #X20E) (defconstant $kAuthMakeChallenge #X20F) (defconstant $kAuthMakeReply #X210) (defconstant $kAuthVerifyReply #X211) (defconstant $kAuthMakeProxy #X212) (defconstant $kAuthTradeProxyForCredentials #X213) (defconstant $kAuthUnlockLocalIdentity #X214) (defconstant $kAuthLockLocalIdentity #X215) (defconstant $kAuthSetupLocalIdentity #X216) (defconstant $kAuthChangeLocalIdentity #X217) (defconstant $kAuthRemoveLocalIdentity #X218) (defconstant $kOCESetupAddDirectoryInfo #X219) (defconstant $kAuthGetUTCTime #X21A) (defconstant $kOCESetupChangeDirectoryInfo #X21B) ; $100 is used as private command (defconstant $kDirEnumerateParse #X101) (defconstant $kDirLookupParse #X102) (defconstant $kDirEnumerateAttributeTypesParse #X103) (defconstant $kDirEnumeratePseudonymParse #X104) (defconstant $kDirNetSearchADAPDirectoriesParse #X105) (defconstant $kDirEnumerateDirectoriesParse #X106) (defconstant $kDirFindADAPDirectoryByNetSearch #X107) (defconstant $kDirNetSearchADAPDirectoriesGet #X108) (defconstant $kDirAddRecord #X109) (defconstant $kDirDeleteRecord #X10A) (defconstant $kDirAddAttributeValue #X10B) (defconstant $kDirDeleteAttributeValue #X10C) (defconstant $kDirChangeAttributeValue #X10D) (defconstant $kDirVerifyAttributeValue #X10E) (defconstant $kDirAddPseudonym #X10F) (defconstant $kDirDeletePseudonym #X110) (defconstant $kDirEnumerateGet #X111) (defconstant $kDirEnumerateAttributeTypesGet #X112) (defconstant $kDirEnumeratePseudonymGet #X113) (defconstant $kDirGetNameAndType #X114) (defconstant $kDirSetNameAndType #X115) (defconstant $kDirGetRecordMetaInfo #X116) (defconstant $kDirLookupGet #X117) (defconstant $kDirGetDNodeMetaInfo #X118) (defconstant $kDirGetDirectoryInfo #X119) (defconstant $kDirEnumerateDirectoriesGet #X11A) (defconstant $kDirAbort #X11B) (defconstant $kDirAddAlias #X11C) (defconstant $kDirAddDSAM #X11D) (defconstant $kDirOpenPersonalDirectory #X11E) (defconstant $kDirCreatePersonalDirectory #X11F) (defconstant $kDirRemoveDSAM #X120) (defconstant $kDirGetDirectoryIcon #X121) (defconstant $kDirMapPathNameToDNodeNumber #X122) (defconstant $kDirMapDNodeNumberToPathName #X123) (defconstant $kDirGetLocalNetworkSpec #X124) (defconstant $kDirGetDNodeInfo #X125) (defconstant $kDirFindValue #X126) (defconstant $kDirInstantiateDSAM #X127) (defconstant $kDirGetOCESetupRefNum #X128) (defconstant $kDirGetDNodeAccessControlGet #X12A) (defconstant $kDirGetRecordAccessControlGet #X12C) (defconstant $kDirGetAttributeAccessControlGet #X12E) (defconstant $kDirGetDNodeAccessControlParse #X12F) (defconstant $kDirDeleteAttributeType #X130) (defconstant $kDirClosePersonalDirectory #X131) (defconstant $kDirMakePersonalDirectoryRLI #X132) (defconstant $kDirAddDSAMDirectory #X133) (defconstant $kDirGetRecordAccessControlParse #X134) (defconstant $kDirRemoveDirectory #X135) (defconstant $kDirGetExtendedDirectoriesInfo #X136) (defconstant $kDirAddADAPDirectory #X137) (defconstant $kDirGetAttributeAccessControlParse #X138) (defconstant $kDirFindRecordGet #X140) (defconstant $kDirFindRecordParse #X141) (deftrap _authbindspecificidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (512 :signed-integer))) (deftrap _authunbindspecificidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (513 :signed-integer))) (deftrap _authresolvecreationid ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (514 :signed-integer))) (deftrap _authgetspecificidentityinfo ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (515 :signed-integer))) (deftrap _authaddkey ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (519 :signed-integer))) (deftrap _authchangekey ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (520 :signed-integer))) (deftrap _authdeletekey ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (521 :signed-integer))) (deftrap _authpasswordtokey ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (522 :signed-integer))) (deftrap _authgetcredentials ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (523 :signed-integer))) (deftrap _authdecryptcredentials ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (524 :signed-integer))) (deftrap _authmakechallenge ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (527 :signed-integer))) (deftrap _authmakereply ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (528 :signed-integer))) (deftrap _authverifyreply ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (529 :signed-integer))) (deftrap _authgetutctime ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (538 :signed-integer))) (deftrap _authmakeproxy ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (530 :signed-integer))) (deftrap _authtradeproxyforcredentials ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (531 :signed-integer))) ; Local Identity API (deftrap _authgetlocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (516 :signed-integer))) (deftrap _authunlocklocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (532 :signed-integer))) (deftrap _authlocklocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (533 :signed-integer))) (deftrap _authaddtolocalidentityqueue ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (517 :signed-integer))) (deftrap _authremovefromlocalidentityqueue ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (518 :signed-integer))) (deftrap _authsetuplocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (534 :signed-integer))) (deftrap _authchangelocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (535 :signed-integer))) (deftrap _authremovelocalidentity ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (536 :signed-integer))) (deftrap _ocesetupadddirectoryinfo ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (537 :signed-integer))) (deftrap _ocesetupchangedirectoryinfo ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (539 :signed-integer))) (deftrap _ocesetupremovedirectoryinfo ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (525 :signed-integer))) (deftrap _ocesetupgetdirectoryinfo ((paramblock (:pointer :authparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (526 :signed-integer))) (deftrap _diraddrecord ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (265 :signed-integer))) (deftrap _dirdeleterecord ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (266 :signed-integer))) (deftrap _direnumerateget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (273 :signed-integer))) (deftrap _direnumerateparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (257 :signed-integer))) (deftrap _dirfindrecordget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (320 :signed-integer))) (deftrap _dirfindrecordparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (321 :signed-integer))) (deftrap _dirlookupget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (279 :signed-integer))) (deftrap _dirlookupparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (258 :signed-integer))) (deftrap _diraddattributevalue ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (267 :signed-integer))) (deftrap _dirdeleteattributevalue ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (268 :signed-integer))) (deftrap _dirdeleteattributetype ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (304 :signed-integer))) (deftrap _dirchangeattributevalue ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (269 :signed-integer))) (deftrap _dirverifyattributevalue ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (270 :signed-integer))) (deftrap _dirfindvalue ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (294 :signed-integer))) (deftrap _direnumerateattributetypesget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (274 :signed-integer))) (deftrap _direnumerateattributetypesparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (259 :signed-integer))) (deftrap _diraddpseudonym ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (271 :signed-integer))) (deftrap _dirdeletepseudonym ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (272 :signed-integer))) (deftrap _diraddalias ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (284 :signed-integer))) (deftrap _direnumeratepseudonymget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (275 :signed-integer))) (deftrap _direnumeratepseudonymparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (260 :signed-integer))) (deftrap _dirgetnameandtype ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (276 :signed-integer))) (deftrap _dirsetnameandtype ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (277 :signed-integer))) (deftrap _dirgetrecordmetainfo ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (278 :signed-integer))) (deftrap _dirgetdnodemetainfo ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (280 :signed-integer))) (deftrap _dirgetdirectoryinfo ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (281 :signed-integer))) (deftrap _dirgetdnodeaccesscontrolget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (298 :signed-integer))) (deftrap _dirgetdnodeaccesscontrolparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (303 :signed-integer))) (deftrap _dirgetrecordaccesscontrolget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (300 :signed-integer))) (deftrap _dirgetrecordaccesscontrolparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (308 :signed-integer))) (deftrap _dirgetattributeaccesscontrolget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (302 :signed-integer))) (deftrap _dirgetattributeaccesscontrolparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (312 :signed-integer))) (deftrap _direnumeratedirectoriesget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (282 :signed-integer))) (deftrap _direnumeratedirectoriesparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (262 :signed-integer))) (deftrap _dirmappathnametodnodenumber ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (290 :signed-integer))) (deftrap _dirmapdnodenumbertopathname ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (291 :signed-integer))) (deftrap _dirgetlocalnetworkspec ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (292 :signed-integer))) (deftrap _dirgetdnodeinfo ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (293 :signed-integer))) ; Trap Dispatchers for Personal Address Book and DSAM Extensions (deftrap _dircreatepersonaldirectory ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (18808832 :signed-longint))) (deftrap _diropenpersonaldirectory ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (18743296 :signed-longint))) (deftrap _dirclosepersonaldirectory ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (19988480 :signed-longint))) (deftrap _dirmakepersonaldirectoryrli ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (20054016 :signed-longint))) (deftrap _diradddsam ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (18677760 :signed-longint))) (deftrap _dirinstantiatedsam ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (19333120 :signed-longint))) (deftrap _dirremovedsam ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (18874368 :signed-longint))) (deftrap _diradddsamdirectory ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (307 :signed-integer))) (deftrap _dirgetextendeddirectoriesinfo ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (310 :signed-integer))) (deftrap _dirgetdirectoryicon ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (289 :signed-integer))) (deftrap _diraddadapdirectory ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (311 :signed-integer))) (deftrap _dirremovedirectory ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (309 :signed-integer))) (deftrap _dirnetsearchadapdirectoriesget ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (264 :signed-integer))) (deftrap _dirnetsearchadapdirectoriesparse ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (261 :signed-integer))) (deftrap _dirfindadapdirectorybynetsearch ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (263 :signed-integer))) (deftrap _dirgetocesetuprefnum ((paramblock (:pointer :dirparamblock)) (async :boolean)) (:stack :signed-integer) (:stack-trap #xAA5E paramblock async (296 :signed-integer))) (deftrap _dirabort ((paramblock (:pointer :dirparamblock))) (:stack :signed-integer) (:stack-trap #xAA5E paramblock (18546688 :signed-longint))) ; $ENDC ; UsingOCEAuthDir ; $IFC NOT UsingIncludes ; $ENDC (export '($KDIRFINDRECORDPARSE $KDIRFINDRECORDGET $KDIRGETATTRIBUTEACCESSCONTROLPARSE $KDIRADDADAPDIRECTORY $KDIRGETEXTENDEDDIRECTORIESINFO $KDIRREMOVEDIRECTORY $KDIRGETRECORDACCESSCONTROLPARSE $KDIRADDDSAMDIRECTORY $KDIRMAKEPERSONALDIRECTORYRLI $KDIRCLOSEPERSONALDIRECTORY $KDIRDELETEATTRIBUTETYPE $KDIRGETDNODEACCESSCONTROLPARSE $KDIRGETATTRIBUTEACCESSCONTROLGET $KDIRGETRECORDACCESSCONTROLGET $KDIRGETDNODEACCESSCONTROLGET $KDIRGETOCESETUPREFNUM $KDIRINSTANTIATEDSAM $KDIRFINDVALUE $KDIRGETDNODEINFO $KDIRGETLOCALNETWORKSPEC $KDIRMAPDNODENUMBERTOPATHNAME $KDIRMAPPATHNAMETODNODENUMBER $KDIRGETDIRECTORYICON $KDIRREMOVEDSAM $KDIRCREATEPERSONALDIRECTORY $KDIROPENPERSONALDIRECTORY $KDIRADDDSAM $KDIRADDALIAS $KDIRABORT $KDIRENUMERATEDIRECTORIESGET $KDIRGETDIRECTORYINFO $KDIRGETDNODEMETAINFO $KDIRLOOKUPGET $KDIRGETRECORDMETAINFO $KDIRSETNAMEANDTYPE $KDIRGETNAMEANDTYPE $KDIRENUMERATEPSEUDONYMGET $KDIRENUMERATEATTRIBUTETYPESGET $KDIRENUMERATEGET $KDIRDELETEPSEUDONYM $KDIRADDPSEUDONYM $KDIRVERIFYATTRIBUTEVALUE $KDIRCHANGEATTRIBUTEVALUE $KDIRDELETEATTRIBUTEVALUE $KDIRADDATTRIBUTEVALUE $KDIRDELETERECORD $KDIRADDRECORD $KDIRNETSEARCHADAPDIRECTORIESGET $KDIRFINDADAPDIRECTORYBYNETSEARCH $KDIRENUMERATEDIRECTORIESPARSE $KDIRNETSEARCHADAPDIRECTORIESPARSE $KDIRENUMERATEPSEUDONYMPARSE $KDIRENUMERATEATTRIBUTETYPESPARSE $KDIRLOOKUPPARSE $KDIRENUMERATEPARSE $KOCESETUPCHANGEDIRECTORYINFO $KAUTHGETUTCTIME $KOCESETUPADDDIRECTORYINFO $KAUTHREMOVELOCALIDENTITY $KAUTHCHANGELOCALIDENTITY $KAUTHSETUPLOCALIDENTITY $KAUTHLOCKLOCALIDENTITY $KAUTHUNLOCKLOCALIDENTITY $KAUTHTRADEPROXYFORCREDENTIALS $KAUTHMAKEPROXY $KAUTHVERIFYREPLY $KAUTHMAKEREPLY $KAUTHMAKECHALLENGE $KOCESETUPGETDIRECTORYINFO $KOCESETUPREMOVEDIRECTORYINFO $KAUTHDECRYPTCREDENTIALS $KAUTHGETCREDENTIALS $KAUTHPASSWORDTOKEY $KAUTHDELETEKEY $KAUTHCHANGEKEY $KAUTHADDKEY $KAUTHREMOVEFROMLOCALIDENTITYQUEUE $KAUTHADDTOLOCALIDENTITYQUEUE $KAUTHGETLOCALIDENTITY $KAUTHGETSPECIFICIDENTITYINFO $KAUTHRESOLVECREATIONID $KAUTHUNBINDSPECIFICIDENTITY $KAUTHBINDSPECIFICIDENTITY $KRECORDFILETYPE $KDIRSROOTFILETYPE $KDNODEFILETYPE $KDIRECTORYFILETYPE $KBUSINESSCARDFILETYPE $KPERSONALDIRECTORYFILETYPE $KPERSONALDIRECTORYFILECREATOR $KNOTIFYNAMECHANGEMASK $KNOTIFYUNLOCKMASK $KNOTIFYLOCKMASK $KNOTIFYNAMECHANGEBIT $KNOTIFYUNLOCKBIT $KNOTIFYLOCKBIT $KAUTHLOCKWILLBEDONE $KAUTHLOCKPENDING $KAUTHLOCALIDENTITYNAMECHANGEOP $KAUTHUNLOCKLOCALIDENTITYOP $KAUTHLOCKLOCALIDENTITYOP $KSUPPORTSFINDRECORDMASK $KSUPPORTSPROXIESMASK $KSUPPORTSAUTHENTICATIONMASK $KSUPPORTSPARTIALPATHNAMESMASK $KSUPPORTSPSEUDONYMSMASK $KSUPPORTSALIASESMASK $KSUPPORTSENUMERATEPSEUDONYMCONTINUEMASK $KSUPPORTSENUMERATEATTRIBUTETYPECONTINUEMASK $KSUPPORTSLOOKUPCONTINUEMASK $KSUPPORTSENUMERATIONCONTINUEMASK $KSUPPORTINDEXRATIOMASK $KSUPPORTSORTBACKWARDSMASK $KCANSUPPORTTYPEORDERMASK $KCANSUPPORTNAMEORDERMASK $KSUPPORTSORDEREDENUMERATIONMASK $KSUPPORTSCONTAINSMASK $KSUPPORTSENDSWITHMASK $KSUPPORTSEXACTMATCHMASK $KSUPPORTSBEGINSWITHMASK $KSUPPORTSMATCHALLMASK $KSUPPORTSATTRIBUTECREATIONIDMASK $KSUPPORTSRECORDCREATIONIDMASK $KSUPPORTSDNODENUMBERMASK $KSUPPORTSFINDRECORDBIT $KSUPPORTSPROXIESBIT $KSUPPORTSAUTHENTICATIONBIT $KSUPPORTSPARTIALPATHNAMESBIT $KSUPPORTSPSEUDONYMSBIT $KSUPPORTSALIASESBIT $KSUPPORTSENUMERATEPSEUDONYMCONTINUEBIT $KSUPPORTSENUMERATEATTRIBUTETYPECONTINUEBIT $KSUPPORTSLOOKUPCONTINUEBIT $KSUPPORTSENUMERATIONCONTINUEBIT $KSUPPORTINDEXRATIOBIT $KSUPPORTSORTBACKWARDSBIT $KCANSUPPORTTYPEORDERBIT $KCANSUPPORTNAMEORDERBIT $KSUPPORTSORDEREDENUMERATIONBIT $KSUPPORTSCONTAINSBIT $KSUPPORTSENDSWITHBIT $KSUPPORTSEXACTMATCHBIT $KSUPPORTSBEGINSWITHBIT $KSUPPORTSMATCHALLBIT $KSUPPORTSATTRIBUTECREATIONIDBIT $KSUPPORTSRECORDCREATIONIDBIT $KSUPPORTSDNODENUMBERBIT $KNOPRIVS $KALLPRIVS $KSEEFOLDERSMASK $KCHANGEPRIVSMASK $KRENAMEMASK $KCHANGEMASK $KDELETEMASK $KADDMASK $KSEEMASK $KSEEFOLDERSBIT $KCHANGEPRIVSBIT $KRENAMEBIT $KCHANGEBIT $KDELETEBIT $KADDBIT $KSEEBIT $KMEMASK $KGUESTMASK $KAUTHENTICATEDINDIRECTORYMASK $KAUTHENTICATEDINDNODEMASK $KFRIENDSMASK $KTHISRECORDOWNERMASK $KMEBIT $KGUESTBIT $KAUTHENTICATEDINDIRECTORYBIT $KAUTHENTICATEDINDNODEBIT $KFRIENDSBIT $KTHISRECORDOWNERBIT $KCURRENTOCESORTVERSION $KCONTAINING $KENDINGWITH $KBEGINSWITH $KEXACTMATCH $KMATCHALL $KSORTBACKWARDS $KSORTFORWARDS $KSORTBYTYPE $KSORTBYNAME $KENUMALLMASK $KENUMINVISIBLEMASK $KENUMDNODEMASK $KENUMPSEUDONYMMASK $KENUMALIASMASK $KENUMDISTINGUISHEDNAMEMASK $KENUMINVISIBLEBIT $KENUMDNODEBIT $KENUMPSEUDONYMBIT $KENUMALIASBIT $KENUMDISTINGUISHEDNAMEBIT $KREFNUMUNKNOWN $KRC4KEYSIZEINBYTES)) (provide-interface 'OCEAuthDir)